我正在使用字符串扩展函数来转换日期字符串。其功能是:
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 对象文件的解析似乎没有问题,但是某些(百分之几)日期没有按预期转换 - 它们失败了 if let dateObj = dateFormater.date(from: self)
语句并返回“转换日期时出错”。
我不知道发生了什么。我尝试删除 dateFormater.locale = Locale.current
并且没有什么区别。
相同的 JSON 对象会产生错误(即每次运行该文件时,都是相同的 JSON 对象产生“转换日期时出错”响应)。当我在文本编辑器中查看 JSON 对象文件时,JSON 对象似乎没有问题(我也在在线 JSON 对象格式化程序中确认了这一点,并且它正确读取了 JSON 对象。)
我还应该补充一点,我正在使用 SwiftyJSON 来解析 JSON 对象。
非常感谢您收到的任何帮助或建议。
有没有办法让我的代码更加健壮?任何人都可以建议为什么不同的机器可能会产生差异,因为应用程序的数据文件、Xcode 和 MacOS 都是相同的。
最佳答案
您的错误来自这一行:dateFormater.locale = Locale.current
。您的两台计算机可能设置为使用不同的区域设置。
按住 option 键的同时单击“运行”,然后检查两台计算机上的“应用程序区域”设置。
关于json - SWIFT DateFormatter 结果不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44182121/