Swift NSDateFormatter 返回一个奇怪的年份 0005 而不是 2023 [已关闭]

Swift NSDateFormatter return a strange year 0005 instead 2023 [closed]

提问人:Binh Ho 提问时间:10/13/2023 最后编辑:Binh Ho 更新时间:10/13/2023 访问量:57

问:


这个问题似乎不是关于帮助中心定义的范围内的编程。

上个月关闭。

我使用的是非常简单的日期格式,但有些设备返回错误的年份。这只发生在日本的 1 台设备上,所以我无法重现它。

let timeStamp = Date().timeIntervalSince1970

let date = Date(timeIntervalSince1970: timeStamp)
let dateFormatter = DateFormatter()
dateFormatter.locale = NSLocale.current
dateFormatter.dateFormat = format
let result = dateFormatter.string(from: date)

print(result)

结果是0005-10-13

呵呵,救命!

Swift DateTimeFormatter

评论

3赞 Joakim Danielson 10/13/2023
timeStamp/1000.0为什么???当存在原生 swift 类型时,请停止使用 NS 类型
1赞 Martheen 10/13/2023
“发生在日本的 1 台设备上”,也许是区域设置?可以通过切换模拟器/设备区域进行测试。我怀疑您正在使用翻译成 Swift 的遗留代码,而在其他地方要么是解析/转换扼流圈。FWIW,这是日本历法的令和 5 年,就像德仁天皇在位的第五年一样
0赞 Dávid Pásztor 10/13/2023
使用硬编码的 s 时,应始终设置 of,因为硬编码的日期格式在某些区域设置中可能没有意义。LocaleDateFormatterdateFormat
1赞 Rob 10/13/2023
你得到的是“时间间隔”(字面意思是自参考日期以来的 # 秒数)除以 1,000,然后使用这个奇怪的值(多少千秒)作为时间间隔参数,这又是寻找秒。
0赞 Rob 10/13/2023
话虽如此,我想知道这个“除以 1000”问题是否是您在撰写问题时引入的问题,因为这在任何设备上都不起作用。如果您遇到的问题仅在特定县的特定设备上发生,则更有可能是区域设置的问题,其中用户可能使用非公历。请参阅文档中的本地化讨论。DateFormatter

答:

1赞 Binh Ho 10/13/2023 #1

好的,我发现了问题。如果设备将日历设置为日本,则会发生此问题。要修复它,只需添加如下所示。

dateFormatter.calendar = Calendar(identifier: .gregorian)

感谢@Martheen

评论

1赞 Duncan C 10/13/2023
是的,如果这是您在代码中期望的,您应该始终明确请求公历。(使用用户的本地日历来显示日期是合理的,甚至建议这样做。中国、日本或以色列的某个人可能希望在他们当地的(非公历)中查看他们的日期