我正在使用字符串扩展函数来转换日期字符串。功能是:
func convertDateString() -> String {
let dateFormater = DateFormatter()
var returnString = ""
dateFormater.dateFormat = "yyyy-MM-dd'T'hh:mm:ss'Z'" // Takes the format from the JSON journal entry for elite dangerous
dateFormater.locale = Locale.current
if let dateObj = dateFormater.date(from: self) {
dateFormater.dateFormat = "dd MMM yyyy hh:mm:ss" // Converts it to a new string (as a date object)
returnString = dateFormater.string(from: dateObj) // Converts the date object back to a string
} else {
returnString = "Error converting date"
}
return returnString
}
我使用的数据集是一系列JSON对象,调用字符串扩展名来转换JSON参考文件的部分结果。
我正在使用两台机器 - 一台是MACPRO,一台是MacBookAir。两者都运行相同版本的MacOS(10.12.5)和相同版本的Xcode。
当我在MACPRO上运行应用程序时,它会解析JSON目标文件而不会出现问题,并按照上面显示的函数正确转换每个日期。但是,当我在MacBookAir上运行应用程序时,在完全相同的数据文件上,JSON目标文件似乎在没有问题的情况下被解析,但是一些(百分之几)的日期没有按预期转换 - 它们使{{1}失败}}语句并返回“错误转换日期”。
我无法弄清楚发生了什么。我尝试删除if let dateObj = dateFormater.date(from: self)
并没有任何区别。
相同的JSON对象产生错误(即每次运行文件时,它都是产生“Error conversion date”响应的相同JSON对象)。当我在文本编辑器中查看JSON目标文件时,JSON对象似乎没有问题(我也在在线JSON对象格式化程序中确认了这一点,它正确地读取了JSON对象。)
我还应该补充说我正在使用SwiftyJSON来解析JSON对象。
感激不尽的任何帮助或建议。
有没有办法让我的代码更健壮?任何人都可以建议为什么不同的机器可能会有所不同,因为数据文件,Xcode和MacOS都是相同的。
答案 0 :(得分:2)
您的错误来自此行:dateFormater.locale = Locale.current
。您的两台计算机可能已设置为使用不同的区域设置。
在按住选项键的同时单击运行,并检查两台计算机上的“应用程序区域”设置。
答案 1 :(得分:0)
感谢所有回复的人。
阅读Code Different引用的文章后,关注David提出的问题,将以下几行添加到我的代码中:
dateFormater.calendar = Calendar(identifier: .iso8601)
dateFormater.locale = Locale(identifier: "en_US_POSIX")
dateFormater.timeZone = TimeZone(secondsFromGMT: 0)
代替&{39; dateFormater.locale = Locale.current
'线。它现在可以完美地工作并在设备之间交换而没有问题。