String 将带时区的ISO8601日期转换为Julia中的日期时间

String 将带时区的ISO8601日期转换为Julia中的日期时间,string,datetime,julia,String,Datetime,Julia,拥有ISO8601日期时间字符串,如2020-11-22T12:14:50+0100和2020-11-22T12:14:50+0200(注意不同的时区),是否可以使用Julia的日期时间(::datetime,::DateFormat)通过在日期格式中添加一些通配符将其转换为正确的日期时间?我们从中学习: DateTime类型不知道时区(用Python的说法是天真的),类似于Java8中的LocalDateTime。可以通过TimeZones.jl包添加其他时区功能,该包编译IANA时区数据库

拥有ISO8601日期时间字符串,如
2020-11-22T12:14:50+0100
2020-11-22T12:14:50+0200
(注意不同的时区),是否可以使用Julia的
日期时间(::datetime,::DateFormat)
通过在
日期格式中添加一些通配符将其转换为正确的日期时间?我们从中学习:

DateTime类型不知道时区(用Python的说法是天真的),类似于Java8中的LocalDateTime。可以通过TimeZones.jl包添加其他时区功能,该包编译IANA时区数据库

有没有办法添加通配符以避免替换? 例如


正如您引用的文档所示,此功能由软件包提供。这是最好的方法:

julia> using Dates, TimeZones

julia> x = ["2020-11-22T12:14:50+0100", "2020-11-22T12:14:50+0200"]
2-element Array{String,1}:
 "2020-11-22T12:14:50+0100"
 "2020-11-22T12:14:50+0200"

julia> ZonedDateTime.(x, DateFormat("y-m-dTHH:MM:SSzzzz"))
2-element Array{ZonedDateTime,1}:
 2020-11-22T12:14:50+01:00
 2020-11-22T12:14:50+02:00

julia> DateTime.(x, DateFormat("y-m-dTHH:MM:SSzzzz")) # Drops the timezone
2-element Array{DateTime,1}:
 2020-11-22T12:14:50
 2020-11-22T12:14:50
如果你真的只想丢弃所有时区信息,我可能会在最后一个
+
-
字符上拆分
而不是使用正则表达式(有一些,所以你的正则表达式并不总是有效)

# not run
Dates.DateTime.(x, DateFormat("y-m-dTH:M:S+0*00"))
julia> using Dates, TimeZones

julia> x = ["2020-11-22T12:14:50+0100", "2020-11-22T12:14:50+0200"]
2-element Array{String,1}:
 "2020-11-22T12:14:50+0100"
 "2020-11-22T12:14:50+0200"

julia> ZonedDateTime.(x, DateFormat("y-m-dTHH:MM:SSzzzz"))
2-element Array{ZonedDateTime,1}:
 2020-11-22T12:14:50+01:00
 2020-11-22T12:14:50+02:00

julia> DateTime.(x, DateFormat("y-m-dTHH:MM:SSzzzz")) # Drops the timezone
2-element Array{DateTime,1}:
 2020-11-22T12:14:50
 2020-11-22T12:14:50
julia> first.(rsplit.(x, [['+','-']], limit=2))
2-element Array{SubString{String},1}:
 "2020-11-22T12:14:50"
 "2020-11-22T12:14:50"

julia> DateTime.(first.(rsplit.(x, [['+','-']], limit=2)), DateFormat("y-m-dTH:M:S"))
2-element Array{DateTime,1}:
 2020-11-22T12:14:50
 2020-11-22T12:14:50