我使用Luxon.js来处理日期,并试图解析来自服务器的一些ISO字符串。它有这样的格式
2019-04-04T12:12:07+03:00我使用的是鲁迅的方法- fromISO,它应该解析这个str
DateTime.fromISO("2019-04-04T12:12:07+03:00", "dd LLLL yyyy")我希望看到04 2019年4月- 15:12的输出,但它返回04 2019年4月- 12:12不知为什么会发生?
我做错了什么吗?因为当我试图使用这个ISO字符串2019-04-04T12:12:07.756Z时,它就像一个魅力。但我不明白为什么前一个不起作用,我该怎么做才能让它发挥作用?
我会感谢你的帮助!
老实说,如果这个问题很愚蠢,我对ISO时间的知识有一些空白。
发布于 2019-04-06 05:17:45
2019-04-04T12:12:07+03:00说“在偏移量为+3的区域,是12:12”。它并没有告诉鲁迅增加3个小时,而是提供了时间表达的背景。例如,由于偏移量为+3的区域比世界协调时提前3小时(这就是它的意思),那么在英格兰是9:12。关键是,这是地球上的一个特定时间,而+3只是告诉你在把时间转换成字符串时使用了什么规则。
鲁迅接受了所有这些信息,并指出了它的真正时间,在它的时间的概念是毫秒数,从1970年初在世界协调时。然后,它可以将其转换为任何区域的本地时间。当然,如果您的计算机位于偏移量为+3的区域,那么本地时间是12:12:
-> TZ=Europe/Moscow node
> DateTime = require("luxon").DateTime
[Function: DateTime]
> var dt = DateTime.fromISO("2019-04-04T12:12:07+03:00")
undefined
> dt.toLocaleString(DateTime.TIME_24_SIMPLE)
'12:12'我的电脑实际上是在美国东海岸,所以我看到了一个非常不同的当地时间:
-> node
> DateTime = require("luxon").DateTime
[Function: DateTime]
> var dt = DateTime.fromISO("2019-04-04T12:12:07+03:00")
undefined
> dt.toLocaleString(DateTime.TIME_24_SIMPLE)
'05:12'这是因为我的偏移量是-4,这意味着本地时间比原始字符串中的+3早7小时。
在我的电脑处于任意区域的情况下,我当然可以告诉鲁迅在任何其他区域表示日期:
> dt.toUTC().toLocaleString(DateTime.TIME_24_SIMPLE)
'09:12'
> dt.setZone("Europe/Moscow").toLocaleString(DateTime.TIME_24_SIMPLE)
'12:12'
> dt.setZone("Asia/Tokyo").toLocaleString(DateTime.TIME_24_SIMPLE)
'18:12'https://stackoverflow.com/questions/55515937
复制相似问题