DateFormatter 在特定设备上返回 nil

Posted

技术标签:

【中文标题】DateFormatter 在特定设备上返回 nil【英文标题】:DateFormatter returns nil on specific devices 【发布时间】:2018-10-06 06:40:09 【问题描述】:

我使用以下代码将字符串转换为日期:

// Input is "06-10-18, 01:30 pm"

func convertStringToDate(string: String) -> Date 
    let formatter = DateFormatter()
    formatter.dateFormat = "dd-MM-yyyy, hh:mm a"
    return formatter.date(from: string)!

这在模拟器和我的设备上运行良好,但是在返回几个客户端设备时它会崩溃。

我尝试通过让它从日期返回一个字符串来查看问题所在,并在客户端设备上返回以下内容:

"06-10-18, 13:30"

为什么它在少数设备上返回不同?

【问题讨论】:

***.com/questions/40692378/… 的可能重复项:将格式化程序的语言环境设置为 Posix。 【参考方案1】:

返回的日期是否正确,您可以使用.timeIntervalSince1970 属性进行检查。发生的情况是,当您打印日期(实际上只是一个 TimeInterval,又名 Double,一个特定时间点,独立于任何日历或时区)时,它正在打印其 description 属性,使用当前的设备设置。

要使用您当前的语言环境打印日期,请使用this 实例方法:

let date = convertStringToDate(string: "06-10-18, 01:30 pm")
print(date.description(with: Locale(identifier: "en_US_POSIX")))

【讨论】:

这是否也适用于使用 'en_GB' 和其他语言环境? 是的,当然,您选择区域设置。它只会更改表示日期的字符串。但是作为Date,还是一样的数字(timeIntervalSince1970)

以上是关于DateFormatter 在特定设备上返回 nil的主要内容,如果未能解决你的问题,请参考以下文章

字符串到日期的转换有时会使用 DateFormatter 返回 nil

如何在日期选择器上设置特定时间?

DateFormatter 返回零

Dateformatter 返回零日期

DateFormatter 返回错误的时间[重复]

Swift:DateFormatter 返回 nil