将带有时区的ISO8601日期转换为Julia中的DateTime

洛基

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

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

x = ["2020-11-22T12:14:50+0100", "2020-11-22T12:14:50+0200"]
Dates.DateTime.(x) # fails
    
# somewhat hacky but doesn't fail.
x = replace.(x, r"\+0.+00" => "") 
Dates.DateTime.(x, DateFormat("y-m-dTH:M:S"))
# 2-element Array{DateTime,1}:
#  2020-11-22T12:14:50
#  2020-11-22T12:14:50

有什么办法可以避免添加通配符replace例如

# not run
Dates.DateTime.(x, DateFormat("y-m-dTH:M:S+0*00"))
马特·B。

正如您引用的文档所暗示的那样,此功能由TimeZones.jl包提供。那是最好的方法:

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

如果您真的只想浪费所有TimeZone信息,我可能会通过split在最终字符+-字符上加注而不是使用正则表达式来进行操作(存在一些半小时甚至四分之一小时的时区,因此您的正则表达式将无法始终正常工作)。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MySQL ISO 8601日期带有时区偏移量而不是Z值

Scala-将带有时区的ISO 8601格式的字符串转换为时间戳

Joda解析GMT时区中的ISO8601日期

Swift-从ISO8601日期字符串中检索时区

在Java中将ISO8601日期转换为UNIX时间戳

将ISO8601日期文本转换为时间戳

如何编写带时区但没有时间成分的ISO 8601日期

将带有时区的日期时间字符串转换为C ++中的UNIX时间戳的快速方法

在Python中将带有时区的time_struct转换为datetime GMT

将带有时区的python datetime转换为字符串

将带有时区的时间日期字符串转换为 utc python

使用moment.js和moment时区将日期,时间和偏移量转换为ISO8601 DateTime

从ISO8601日期时间字符串中提取时区

UTC iso8601日期为本地时区的某些格式

获取ISO8601中带有日期的年数

如何在python中将带有时区的日期字符串转换为日期时间

使用UTC时区解析ISO8601日期字符串为最新日期

如何在 PHP 中将没有时区的 ISO 8601 时间戳转换为带时区的 ISO 8601 时间戳?

纪元或iso8601日期格式?

2个iso8601日期之间的周数

如何将带有时区的奇怪日期时间字符串转换为时间戳(PySpark)

将带时区的java.util.Date转换为带有时区的时间戳

在Excel中解析ISO8601日期/时间(包括TimeZone)

MongoDB中的ISO8601日期字符串(索引和查询)

ISO 8601如何在JavaScript中格式化带有时区偏移的日期?

如何将带有时区的json / javascript日期解析为C#DateTime?

Swift:将 ISO8601 转换为日期

将ISO 8601日期和时间字符串转换为日期

将带有时区的值转换为时间戳