From de44a0b736cb910b8ff7d21d29e5649d39788e19 Mon Sep 17 00:00:00 2001 From: Jeffrey Sarnoff Date: Tue, 26 Jul 2022 12:43:51 -0400 Subject: [PATCH 1/6] safestring(df) --- src/dateformat.jl | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/dateformat.jl b/src/dateformat.jl index fb09ebf3..ba3b0971 100644 --- a/src/dateformat.jl +++ b/src/dateformat.jl @@ -3,8 +3,14 @@ Dates.default_format(::Type{NanoDate}) = ISONanoDateFormat NanoDate(nd::NanoDate, df::DateFormat) = format(nd, df) -# returns the specifier part as a string -Base.String(df::DateFormat) = string(df)[12:end-1] +# get the specifier part of a DateFormat as a string +# restricts the specifier to 9 subsecond digits +function safestring(df::DateFormat) + str = string(df)[12:end-1] + sepidx = findlast('.', str) + isnothing(sepidx) && return str + str[begin:sepidx+min(9, length(str))] +end omit(needle::Nothing, haystack::Nothing) = nothing omit(needle, haystack::Nothing) = nothing From 9c6e3c2f1d516bc4eb1f5f52eb663d919b90ab07 Mon Sep 17 00:00:00 2001 From: Jeffrey Sarnoff Date: Tue, 26 Jul 2022 12:44:39 -0400 Subject: [PATCH 2/6] String -> safestring --- src/dateformat.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dateformat.jl b/src/dateformat.jl index ba3b0971..52bb98df 100644 --- a/src/dateformat.jl +++ b/src/dateformat.jl @@ -57,7 +57,7 @@ function findeach(needle, haystack) end function nanodateformat(nd::NanoDate, df::DateFormat; subsecsep::Union{Char,AbstractString}='.') - dfstr = String(df) + dfstr = safestring(df) scount, sindices = findeach('s', dfstr) idxsubsecsep = subsecsep == "" ? nothing : findlast(subsecsep, dfstr) if !isnothing(idxsubsecsep) From eecad02066044264e1167e675a2ecd6131877017 Mon Sep 17 00:00:00 2001 From: Jeffrey Sarnoff Date: Tue, 26 Jul 2022 12:48:03 -0400 Subject: [PATCH 3/6] String(df) -> safestring(df) --- src/strings.jl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/strings.jl b/src/strings.jl index b8e1c061..69794e19 100644 --- a/src/strings.jl +++ b/src/strings.jl @@ -82,7 +82,7 @@ charvec2string(chrs::AbstractVector{Char}) = foldl(*, chrs; init = "") function nanodate_format(nd, df) nooffset(df) indices = indexperiods(df) - dfstr = String(df) + dfstr = safestring(df) chrs = string2charvec(dfstr) indices = NamedTuple{(:yr, :mn, :dy, :hr, :mi, :sc, :ss)}(indices) # omit offset field syms = keys(indices) @@ -142,7 +142,7 @@ end subsec_str = lpad(subsec_value, 9, '0') supersec = datetime - Millisecond(datetime) - dfstr = String(df) + dfstr = safestring(df) str = Dates.format(datetime, df) value(nd.nanosecs) == 0 && return str @@ -195,7 +195,7 @@ function nanodate_format(nd, df, sep) str end -nooffset(df::DateFormat) = nooffset(String(df)) +nooffset(df::DateFormat) = nooffset(safestring(df)) function nooffset(str::AbstractString) if occursin('+', str) throw(ArgumentError("utc offsets are not supported in format(), use timestamp()")) @@ -203,7 +203,7 @@ function nooffset(str::AbstractString) end -separate_offset(df::DateFormat) = separate_offset(String(df)) +separate_offset(df::DateFormat) = separate_offset(safestring(df)) function separate_offset(str::AbstractString) if isempty(str) || isdigit(str[end]) @@ -323,7 +323,7 @@ function getpart(r::UnitRange, str) end getpart(x::Nothing, str) = "0" -indexperiods(df::DateFormat) = indexperiods(String(df)) +indexperiods(df::DateFormat) = indexperiods(safestring(df)) function indexperiods(dfstr::String) str = strip(dfstr) From 7cb597c6ca9145cb3a8a169b774050d1d638aa4b Mon Sep 17 00:00:00 2001 From: Jeffrey Sarnoff Date: Tue, 26 Jul 2022 12:56:18 -0400 Subject: [PATCH 4/6] Update dateformat.jl --- src/dateformat.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dateformat.jl b/src/dateformat.jl index 52bb98df..b6ffe4d0 100644 --- a/src/dateformat.jl +++ b/src/dateformat.jl @@ -9,7 +9,7 @@ function safestring(df::DateFormat) str = string(df)[12:end-1] sepidx = findlast('.', str) isnothing(sepidx) && return str - str[begin:sepidx+min(9, length(str))] + str[begin:sepidx+min(9, length(str)-sepidx)] end omit(needle::Nothing, haystack::Nothing) = nothing From 1f553dcc5ac01c6a28baa0ee28c5150ce9e842ca Mon Sep 17 00:00:00 2001 From: Jeffrey Sarnoff Date: Tue, 26 Jul 2022 13:38:01 -0400 Subject: [PATCH 5/6] fix safestring --- src/dateformat.jl | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/dateformat.jl b/src/dateformat.jl index b6ffe4d0..13a2e9fa 100644 --- a/src/dateformat.jl +++ b/src/dateformat.jl @@ -6,10 +6,29 @@ NanoDate(nd::NanoDate, df::DateFormat) = format(nd, df) # get the specifier part of a DateFormat as a string # restricts the specifier to 9 subsecond digits function safestring(df::DateFormat) - str = string(df)[12:end-1] - sepidx = findlast('.', str) - isnothing(sepidx) && return str - str[begin:sepidx+min(9, length(str)-sepidx)] + str1 = string(df)[12:end-1] + str2 = "" + sepidx = findlast('.', str1) + isnothing(sepidx) && return str1 + + if endswith(str1, "Z") + str1 = str1[1:end-1] + str2 = "Z" + elseif endswith(str1, "m") # "±hh:mm" or "±hhmm" + pmidx = findlast('h', str1) + if isnothing(pmidx) || pmidx == 1 || (str1[pmidx-1] != '+' || str1[pmidx-1] != '-') + return str1 + else + pmidx -= 1 + str1 = str1[1:pmidx-1] + str2 = str1[pmidx:end] + end + end + + sidxlast = findlast('s', str1) + sidxmax = sepidx + 9 + sidxlast = min(sidxlast, sidxmax) + str1[begin:sidxlast] * str2 end omit(needle::Nothing, haystack::Nothing) = nothing From fc0c6dfcf9bdfb50b33b2800a2082b0d6af7bba0 Mon Sep 17 00:00:00 2001 From: Jeffrey Sarnoff Date: Tue, 26 Jul 2022 13:40:40 -0400 Subject: [PATCH 6/6] Create sweeps_to_note.md --- experment/sweeps_to_note.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 experment/sweeps_to_note.md diff --git a/experment/sweeps_to_note.md b/experment/sweeps_to_note.md new file mode 100644 index 00000000..495d5e66 --- /dev/null +++ b/experment/sweeps_to_note.md @@ -0,0 +1 @@ +coveralls is to slow right now