快速从字符串转换为日期返回 nil

Posted

技术标签:

【中文标题】快速从字符串转换为日期返回 nil【英文标题】:Conversion from string to date in swift returns nil 【发布时间】:2017-03-13 03:05:38 【问题描述】:

我在 swift 3 中将字符串转换为日期时遇到问题。这是我的代码,它在转换时返回一个 nil 值。

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEE, dd MMM yyyy hh:mm:ss +zzzz"
dateFormatter.locale = Locale.init(identifier: "bg_BG")

let recdate = dateFormatter.date(from:"Fri, 10 Mar 2017 15:03:03 +0530")!;`

【问题讨论】:

【参考方案1】:

您为小时和时区设置了错误的格式说明符。使用这个:

dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss Z"
dateFormatter.locale = Locale(identifier: "en_US")
hh 表示 12 小时格式,因此没有 15 小时。请改用 HH +zzzz 是无效的时区说明符。请改用Z 除非星期五在保加利亚语中缩短为 Fri,否则请使用英语语言环境

【讨论】:

试过这个 E, d MMM yyyy HH:mm:ss ZEEE, dd MMM yyyy HH:mm:ss Z ,还是不行在职的 。我仍然收到 致命错误:在展开可选值时意外发现 nil 2017-03-13 08:52:50.557530 Dubber[1851:1317294] 致命错误:在展开可选值时意外发现 nil跨度> @nikhil 试试dateFormatter.locale = Locale.current,我不知道为什么“bg_BG”不起作用。【参考方案2】:

您有几个问题,首先,正如 Code Different 所指出的,您需要使用 HH 来读取 24 小时时间。但是,您还指定了语言环境,这意味着“单词”部分必须是保加利亚语,而不是英语。保留默认语言似乎可以正常工作:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss +zzzz"
//dateFormatter.locale = Locale.init(identifier: "bg_BG")
let recdate = dateFormatter.date(from:"Fri, 10 Mar 2017 15:03:03 +0530")!

如果您要使用保加利亚的日期和月份名称,您的格式应该可以使用。

dateFormatter.date(from:"нд, 10 март 2017 15:03:03 +0530")

【讨论】:

以上是关于快速从字符串转换为日期返回 nil的主要内容,如果未能解决你的问题,请参考以下文章

nil 将字符串转换为日期 [重复]

从 String 到 NSURL 的转换不断返回 nil

查询从日期时间转换为日期mysql

java 字符串转换成日期

DateFormatter 在特定设备上返回 nil

iOS日期转换器返回正确的日期[重复]