检查Julia的夏令时(DST)是否有效
我需要将历元时间转换为日期时间字符串,反之亦然。 时间字符串的格式为检查Julia的夏令时(DST)是否有效,julia,Julia,我需要将历元时间转换为日期时间字符串,反之亦然。 时间字符串的格式为YYYY/month/day HH:MM:SS,表示本地时间 如何获得DST是否有效 const CSV_DATE_FORMAT = "%Y/%m/%d %H:%M:%S" function ts(datetime::String) ts = Libc.strptime(CSV_DATE_FORMAT, datetime) # how to check if DST in is effect
YYYY/month/day HH:MM:SS
,表示本地时间
如何获得DST是否有效
const CSV_DATE_FORMAT = "%Y/%m/%d %H:%M:%S"
function ts(datetime::String)
ts = Libc.strptime(CSV_DATE_FORMAT, datetime)
# how to check if DST in is effect ???
return Int(round(time(ts)))
end
function datetime(ts::Int64, fmt::String = "%Y/%m/%d %H:%M:%S")
dt = Libc.TmStruct(ts)
# if daylightsaving()
# ts.isdst = 1
# else
# ts.isdst = 0
# end
Libc.strftime(fmt, dt)
end
如何检查夏令时是否有效?我在这里根本不会使用Libc;Julia标准库
日期
与时区
软件包结合使用,功能更加强大。首先,将日期解析为无时区的日期:
const CSV_DATE_FORMAT = "%Y/%m/%d %H:%M:%S"
function ts(datetime::String)
ts = Libc.strptime(CSV_DATE_FORMAT, datetime)
# how to check if DST in is effect ???
return Int(round(time(ts)))
end
function datetime(ts::Int64, fmt::String = "%Y/%m/%d %H:%M:%S")
dt = Libc.TmStruct(ts)
# if daylightsaving()
# ts.isdst = 1
# else
# ts.isdst = 0
# end
Libc.strftime(fmt, dt)
end
julia> using Dates, TimeZones
julia> format = dateformat"Y/m/d H:M:S"
dateformat"Y/m/d H:M:S"
julia> dt = DateTime("2020/10/26 11:08", format)
2020-10-26T11:08:00
然后附加本地时区:
julia> zdt = ZonedDateTime(dt, localzone())
2020-10-26T11:08:00-04:00
最后,您可以询问未来是否会有任何过渡,以及它们是什么:
julia> show_next_transition(zdt)
Transition Date: 2020-11-01
Local Time Change: 02:00 → 01:00 (Backward)
Offset Change: UTC-5/+1 → UTC-5/+0
Transition From: 2020-11-01T01:59:59.999-04:00 (EDT)
Transition To: 2020-11-01T01:00:00.000-05:00 (EST)
请注意,“夏令时”的概念并没有显式地编码到时区中——只是存在可变时区,可以改变它们在给定时间所处的常数偏移量。您可以在上面的输出中看到,我目前在UTC-4,但将在周日切换到UTC-5
因此,如果我想要一个简单的函数,询问是否存在与我的正常时区的偏移量,它将如下所示:
julia> is_offset(zdt::ZonedDateTime) = zdt.zone.offset.dst != Second(0)
julia> is_offset(ZonedDateTime(dt, tz"America/New_York"))
true
julia> is_offset(ZonedDateTime(dt, tz"Europe/Berlin"))
false
所以现在,纽约有一个与“标准”时区的偏移量(我们称之为偏移夏时制),但柏林没有(它昨天转换回来)