字符串到日期的转换有时 returns nil 与 DateFormatter
String to date conversion sometimes returns nil with DateFormatter
我刚刚阅读了这个,其中详细说明了在尝试将给定字符串转换回日期之前,您需要在格式之前设置语言环境。
我有以下遵循该格式的代码,但从字符串到日期的转换似乎仍然 return 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 。您必须像这样更改您的代码
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'。
我刚刚阅读了这个
我有以下遵循该格式的代码,但从字符串到日期的转换似乎仍然 return 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 。您必须像这样更改您的代码
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'。