如何在Julia中使用2038年后的带时区日期?

3

我需要在Julia中使用2038年之后的日期。怎么办?显然,在2038年之后,您不能使用带时区的日期。

TimeZones.jl的md文件

https://github.com/JuliaTime/TimeZones.jl/blob/d997abb7398ca8514007d1cbc77a031f721c727b/docs/types.md

以下是对不存在链接页面的解释:

“另外,当使用超过2038年的未来日期时,将会导致错误:

julia> ZonedDateTime(2039, warsaw)
ERROR: TimeZone Europe/Warsaw does not handle dates on or after 2038-03-28T01:00:00 UTC
 in call at ~/.julia/v0.4/TimeZones/src/timezones/types.jl:146
 in ZonedDateTime at ~/.julia/v0.4/TimeZones/src/timezones/types.jl:260

有可能存在超过2038年的工作时间区 [链接],但由于这些日期在未来,时区规则可能会发生变化,因此可能不准确。


这个星球上没有人能告诉你2038年时区会是什么样子。 - Matt Johnson-Pint
@MattJohnson 我不是在问2038年时区会是什么样子。请仔细阅读我的问题!我正在询问如何根据今天的规则计算时区中的日期 - Julia可以为从今天到2038年的任何年份以及过去计算,但不能超出看似随意的2038年。 - Ferenc
FixedTimeZone 对任何一年都适用。例如,对于某个 DateTime,如果给定 warsaw 是 UTC+0200,那么可以使用 ZonedDateTime(2039, FixedTimeZone("+0200"))。正如 @MattJohnson 所说,过度依赖 2038 年后的夏令时计划是不明智的。 - Dan Getz
1个回答

4
这里是正确的链接
在它所说的地方:
由于VariableTimeZone的内部表示,无法确定时区转换到无穷大的时间。自2038-01-19T03:14:07以来,这是可以由Int32(Dates.unix2datetime(typemax(Int32)))表示的最后一个DateTime,因此决定2037年是计算所有转换日期的最后一年。如果已知在最后一个转换之后存在其他转换,则指定截止日期。
重要的是要注意,由于我们谈论的是未来的时区转换,并且规定这些转换的规则可能会发生变化,可能不准确。如果您仍然想使用超过默认截止日期的未来ZonedDateTime,则可以重新编译TimeZone对象并指定max_year关键字:
using TimeZones
    
TimeZones.Olson.compile(max_year=2200)
    
ZonedDateTime(DateTime(2100), TimeZone("Europe/Warsaw"))

>>> 2100-01-01T00:00:00+01:00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接