在swift中从字符串到日期的转换返回nil

我在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")!;` 

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

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

你有几个问题,首先,正如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")