2019-04-04T12:12:07+03:00
说“在偏移量为 +3 的区域中,它是 12:12”。它并没有告诉 Luxon 增加 3 小时;它提供了表达时间的背景。例如,因为偏移量为 +3 的区域的当地时间比 UTC 早 3 小时(这就是它的意思),所以在英格兰是 9:12。关键是它是地球上的一个特定时间,+3 只是告诉你使用什么规则将那个时间变成一个字符串。
Luxon 接收所有这些信息并计算出它的真实时间,在它的时间概念中,这是自 1970 年初以来在 UTC 中发生的毫秒数。然后它可以将其转换为任何区域的本地时间。当然,如果您的计算机位于偏移量为 +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个小时。
当我的计算机在任何区域时,我当然可以告诉 Luxon 在任何其他区域中表示日期:
> 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'