【问题标题】:Convert date string swift快速转换日期字符串
【发布时间】:2016-06-20 13:10:19
【问题描述】:

我有一个这种格式的日期字符串:

2016-06-20T13:01:46.457+02:00

我需要把它改成这样:

20/06/2016

以前我一直用这个库 -> SwiftDate 来操作日期,但现在不行了。

我也试过类似的东西:

let myDate = self.dateNoteDict[indexPath.row]!
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss.SSSSxxx"
    let date = dateFormatter.dateFromString(myDate)
    print("date -> \(date)")

但它不起作用。我该怎么办?

提前致谢。

【问题讨论】:

  • 日期格式"yyyy-MM-dd hh:mm:ss.SSSSxxx" 与字符串2016-06-20T13:01:46.457+02:00 的格式不匹配。例如,日期格式中的“T”在哪里?
  • 我知道,但我找不到合适的匹配项
  • 这个文档很有帮助:i.stack.imgur.com/lkYVY.png
  • 您必须将您的字符串放在一行中,并将其下的格式放在第二行,并尝试“匹配”格式。例如,“hh”是 12h 格式,但字符串似乎处理 24h 格式,所以用“HH”代替,等等。试试这个:yyyy-MM-dd'T'HH:mm:ssZ
  • @Larme 它不起作用,日期 == nil

标签: ios swift date nsdate nsdateformatter


【解决方案1】:

带有小数秒和时区的标准 ISO8601 日期格式是

yyyy-MM-dd'T'HH:mm:ss.SSSZ

let myDate = "2016-06-20T13:01:46.457+02:00"
let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") // edited
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
let date = dateFormatter.dateFromString(myDate)!
dateFormatter.dateFormat = "dd/MM/yyyy"
let dateString = dateFormatter.stringFromDate(date)

斯威夫特 3:

let myDate = "2016-06-20T13:01:46.457+02:00"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX") // edited
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
let date = dateFormatter.date(from:myDate)!
dateFormatter.dateFormat = "dd/MM/yyyy"
let dateString = dateFormatter.string(from:date)

在 macOS 10.13+ 中,iOS 11+ ISO8601DateFormatter 是输入格式化程序的替代选择

let myDate = "2016-06-20T13:01:46.457+02:00"
let inputFormatter = ISO8601DateFormatter()
inputFormatter.formatOptions = [.withFullDate, .withFullTime, .withFractionalSeconds]
let date = dateFormatter.date(from:myDate)!
let outputFormatter = DateFormatter()
outputFormatter.locale = Locale(identifier: "en_US_POSIX")
outputFormatter.dateFormat = "dd/MM/yyyy"
let dateString = dateFormatter.string(from:date)

【讨论】:

  • 它有效。感谢您的帮助和解释。 +1
  • NSDateFormatter() 自 Swift 3 起已弃用
  • 这个转换给了我UTC日期,我想把它转换成我的本地日期
  • 对于固定日期格式,您需要将日期格式化程序区域设置为“en_US_POSIX”
  • 如果您使用的是固定格式的日期,请首先将日期格式化程序的区域设置为适合您的固定格式。在大多数情况下,最好选择的语言环境是 en_US_POSIX,这是一种专门设计用于生成美国英语结果的语言环境无论用户和系统偏好如何。 en_US_POSIX 在时间上也是不变的(如果美国在未来的某个时间点改变了日期格式,en_US 将改变以反映新的行为,但 en_US_POSIX 不会)和平台之间(在 iPhone OS 上工作相同)就像它在 OS X 和其他平台上一样)
【解决方案2】:

在将 String 转换为 Date 时,我总是使用此代码。 (斯威夫特 3

extension String
{
     func  toDate( dateFormat format  : String) -> Date
    {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = format
        if let date = dateFormatter.date(from: self)
        {
            return date
        }
        print("Invalid arguments ! Returning Current Date . ")
        return Date()
    }
}

然后像 . .

print ( "2016-06-20T13:01:46.457+02:00".toDate(dateFormat: "yyyy-MM-dd'T'HH:mm:ss.SSSZ") )
//Capital HH for 24-Hour Time 

【讨论】:

  • 这实际上将作为日期返回,以防日期字符串解析失败。您应该将返回类型更改为可选并在失败时返回 nil。
【解决方案3】:

在将字符串转换为日期时,我总是使用此代码。 (斯威夫特 4.2)

    let myDate = datePicker.date
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    let date = myDate
    dateFormatter.dateFormat = "dd/MM/yyyy"
    let dateString = dateFormatter.string(from:date)
    print(dateString)

您也可以手动尝试:

    let myDate = "2019-02-22T08:21:11+0000"
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    let date = myDate
    dateFormatter.dateFormat = "dd/MM/yyyy"
    let dateString = dateFormatter.string(from:date)
    print(dateString)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 2013-12-14
    • 2015-04-09
    相关资源
    最近更新 更多