使用 DateFormatter().date(from: String) 时返回的日期格式化程序
Posted
技术标签:
【中文标题】使用 DateFormatter().date(from: String) 时返回的日期格式化程序【英文标题】:Date Formatter returns when using DateFormatter().date(from: String) 【发布时间】:2019-09-22 12:28:26 【问题描述】:我有以下代码:
//converting date into desired format
let formatterGet = DateFormatter()
formatterGet.dateFormat = "yyyy-MM-dd HH:mm:ss zzzz" //"2014-09-21 21:00:00 0000"
let date = formatterGet.date(from: birthday)
print(date)
// "decoding" the new format to be shown in the UI
let formatterShow = DateFormatter()
formatterShow.dateFormat = "MMM dd, yyyy"
birthdayTextField.text = formatterShow.string(from: date ?? Date())
问题是当我在控制台中打印日期时,它每次都显示 nil。我该如何解决?
【问题讨论】:
在您评论的日期中,时间和时区之间有 2 个空格。这是一个错字还是它实际上是这样的? 再确认一下,你确定birthday
的格式是“2014-09-21 21:00:00 0000”的评论格式吗?此外,在评论中,“21:00:00”和“0000”之间有一个双空格
@alxlives 实际上有两个空格“21:00:00”和“0000”,但是在迁移到 ios13 之前它是这样工作的,现在它没有。我尝试了两个空格,但它仍然不起作用。
@Fogmeister 实际上有两个空格,但是当我将它们添加到 dateFormat 字符串时,它仍然返回 nil。
0000
不能被任何时区说明符解码,除非您添加 +
或 -
符号。 zzzz
并不代表你认为的那样。见unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns
【参考方案1】:
问题在于您的DateFormatter
转换。你有两个选择:
1:从格式化程序和日期中删除zzzz
:
let birthday = "2014-09-21 21:00:00"
let formatterGet = DateFormatter()
formatterGet.dateFormat = "yyyy-MM-dd HH:mm:ss"
let date = formatterGet.date(from: birthday)
print(date)
输出:
Optional(2014-09-22 00:00:00 +0000)
2:在日期上添加+
符号:
let birthday = "2014-09-21 21:00:00 +0000"
let formatterGet = DateFormatter()
formatterGet.dateFormat = "yyyy-MM-dd HH:mm:ss zzzz"
let date = formatterGet.date(from: birthday)
print(date)
输出:
Optional(2014-09-22 00:00:00 +0000)
【讨论】:
谢谢,但我尝试删除 zzzz,但它不起作用。另外,我不能将“+”添加到“0000”,因为它是从服务器返回的 @Nikkko "+0000" 表示 UTC 时间。是的,把它加回来。不要将它从您的字符串"2014-09-21 21:00:00 +0000"
中删除并使用日期格式 "yyyy-MM-dd HH:mm:ss Z"
。不要忘记将日期格式化程序语言环境设置为"en_US_POSIX"
,如果您需要其他方式,请将时区设置为从 gmt 开始的零秒
问题是服务器日期格式不兼容。如果服务器日期无法更改,您是否考虑过将其替换在前面,例如:birthday = birthday.replacingOccurrences(of: " 0000", with: "+0000")
?
@alxlives 我最终使用了您的方法,到目前为止,它对我来说非常有用。非常感谢!!
如果服务器日期字符串始终以两个空格和0000
结尾,则使用"yyyy-MM-dd HH:mm:ss 0000"
作为日期格式。以上是关于使用 DateFormatter().date(from: String) 时返回的日期格式化程序的主要内容,如果未能解决你的问题,请参考以下文章
您可以使用 Swift DateFormatter 获取 Date 对象,对其进行格式化,然后将其作为 Date 对象返回吗?