From 4a0256ed54816993ea97d29059965cd8e3e448f7 Mon Sep 17 00:00:00 2001 From: Fabian Gans Date: Fri, 14 Feb 2020 13:47:18 +0100 Subject: [PATCH 1/2] Split time zone info if it is given --- src/CFTime.jl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/CFTime.jl b/src/CFTime.jl index d5fe4c1..b6e4978 100644 --- a/src/CFTime.jl +++ b/src/CFTime.jl @@ -503,9 +503,14 @@ function parseDT(::Type{DT},str) where DT <: Union{DateTime,AbstractCFDateTime} (y,m,d,h,mi,s,Int64(0)) =# + timestr,tz = if occursin("+",timestr) + ts,tz = split(timestr,"+") + ts,tz + else + timestr, "00:00" + end time_split = split(timestr,':') - h_str, mi_str, s_str = if length(time_split) == 2 time_split[1], time_split[2], "00" @@ -516,7 +521,6 @@ function parseDT(::Type{DT},str) where DT <: Union{DateTime,AbstractCFDateTime} h = parse(Int64,h_str) mi = parse(Int64,mi_str) - s,ms = if occursin('.',s_str) # seconds contain a decimal point, e.g. 00:00:00.0 From 4b38a98507bbf8d93155a468dc83b35925070298 Mon Sep 17 00:00:00 2001 From: Fabian Gans Date: Wed, 19 Feb 2020 12:32:12 +0100 Subject: [PATCH 2/2] Add unit tests and a warning if time zone is not zero --- src/CFTime.jl | 6 ++++++ test/test_time.jl | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/CFTime.jl b/src/CFTime.jl index b6e4978..e4b1140 100644 --- a/src/CFTime.jl +++ b/src/CFTime.jl @@ -506,9 +506,15 @@ function parseDT(::Type{DT},str) where DT <: Union{DateTime,AbstractCFDateTime} timestr,tz = if occursin("+",timestr) ts,tz = split(timestr,"+") ts,tz + elseif occursin("-",timestr) + ts,tz = split(timestr,"-") + ts,string("-",tz) else timestr, "00:00" end + if !all(iszero(parse.(Int,split(tz,":")))) + @warn "Time zones are currently not supported by CFTime. Ignoring Time zone information: $(tz)" + end time_split = split(timestr,':') h_str, mi_str, s_str = diff --git a/test/test_time.jl b/test/test_time.jl index d2c258b..073162e 100644 --- a/test/test_time.jl +++ b/test/test_time.jl @@ -420,3 +420,25 @@ data = [0,1,2,3] dt = CFTime.timedecode(DateTime360Day,data,"days since 2000-01-01 00:00:00") data2 = CFTime.timeencode(dt,"days since 2000-01-01 00:00:00",DateTime360Day) @test data == data2 + +#issue #6 + +data = [0,1,2,3] +dt = CFTime.timedecode(DateTime,data,"days since 2000-01-01 00:00:00+00") +data2 = CFTime.timeencode(dt,"days since 2000-01-01 00:00:00+00",DateTime) +@test data == data2 + +data = [0,1,2,3] +dt = CFTime.timedecode(DateTime360Day,data,"days since 2000-01-01 00:00:00+00:00") +data2 = CFTime.timeencode(dt,"days since 2000-01-01 00:00:00+00:00",DateTime360Day) +@test data == data2 + +data = [0,1,2,3] +dt = CFTime.timedecode(DateTime,data,"days since 2000-01-01 00:00:00+01") +data2 = CFTime.timeencode(dt,"days since 2000-01-01 00:00:00+00",DateTime) +@test data == data2 + +data = [0,1,2,3] +dt = CFTime.timedecode(DateTime360Day,data,"days since 2000-01-01 00:00:00-01:00") +data2 = CFTime.timeencode(dt,"days since 2000-01-01 00:00:00+00:00",DateTime360Day) +@test data == data2