字符串到日期的转换有时会使用 DateFormatter 返回 nil
Posted
技术标签:
【中文标题】字符串到日期的转换有时会使用 DateFormatter 返回 nil【英文标题】:String to date conversion sometimes returns nil with DateFormatter 【发布时间】:2021-12-11 00:29:34 【问题描述】:我刚刚阅读了这个post,其中详细说明了在尝试将给定字符串转换回日期之前,您需要在格式之前设置语言环境。
我有以下遵循该格式的代码,但从字符串到日期的转换似乎仍然返回nil
,尽管在操场上它似乎工作正常。
// originalDate style is the .full style, "Friday, December 10, 2021 at 4:17:04 PM Pacific Standard Time"
let df: DateFormatter = DateFormatter()
df.locale = Locale(identifier: "en_US_POSIX")
df.dateFormat = "MMM d, yyyy" // Sep 12, 2018 format'
let newDate = df.date(from: originalDate)
let newStringDate = df.string(from: newDate!) // throws found nil when unwrapping
这可能是什么原因造成的?
编辑 1:我正在使用 SQLite.swift 从 sqlite 数据库中提取字符串类型
【问题讨论】:
originalDate的格式需要匹配df.dateFormat。 请分享原始日期样式字符串 我建议您以更简单(更短)的格式存储您的日期。 谢谢大家!我没有意识到你必须有相同的格式。我想我必须将其转换为 Date 然后将其转换回我想要的字符串格式或以较短的格式存储它 【参考方案1】:回答您的问题(字符串到日期为 nil):从字符串转换为日期时,您必须使用与 String 相同的格式。我假设你的 cmets 的 originalDate 。您必须像这样更改代码
let originalDate = "Friday, December 10, 2021 at 4:17:04 PM"
let df: DateFormatter = DateFormatter()
df.locale = Locale(identifier: "en_US_POSIX")
df.dateFormat = "EEEE, MMMM d, yyyy 'at' h:mm:ss a"
let newDate = df.date(from: originalDate)
print(newDate)
如果您再次想要从日期开始的字符串,那么您可以再次指定您想要的格式。
df.dateFormat = "MMM d, yyyy" // Sep 12, 2018 format'
let newStringDate = df.string(from: newDate!)
print(newStringDate)
注意:如果您尝试使用 print 在控制台中记录 newDate 值,有时它会显示为 nil。在这种情况下,您可以在控制台中尝试“po newDate”。
【讨论】:
谢谢。我将格式更改为相同的样式,现在它可以工作了。我将不得不更改存储日期的方式或进行一些额外的转换。以上是关于字符串到日期的转换有时会使用 DateFormatter 返回 nil的主要内容,如果未能解决你的问题,请参考以下文章