diff --git a/timeutils.nim b/timeutils.nim index 002c57a..8d8674d 100644 --- a/timeutils.nim +++ b/timeutils.nim @@ -1,7 +1,11 @@ import times const zeroTime = fromUnix(0) -const ISO_8601_FULL_FORMAT = "yyyy-MM-dd'T'HH:mm:sszzz" +const ISO_8601_FORMATS = @[ + "yyyy-MM-dd'T'HH:mm:ssz", + "yyyy-MM-dd'T'HH:mm:sszzz", + "yyyy-MM-dd'T'HH:mm:ss'.'fffzzz" +] proc format*(ti: TimeInterval, fmt: string): string = let info = (fromUnix(0) + ti).utc @@ -48,10 +52,14 @@ proc startOfWeek*(ti: DateTime, startDay = dMon): DateTime = return (ti - diff.days).startOfDay proc parseIso8601*(val: string): DateTime = - return val.parse(ISO_8601_FULL_FORMAT) + var errString = "" + for df in ISO_8601_FORMATS: + try: return val.parse(df) + except: errString &= "\n" & getCurrentExceptionMsg() + raise newException(Exception, "Could not parse date. Tried:" & errString) proc formatIso8601*(d: DateTime): string = - return d.format(ISO_8601_FULL_FORMAT) + return d.format(ISO_8601_FORMATS[2]) # This is a workaround needed due a bug in Nim's times.parse procedure. # see: https://github.com/nim-lang/Nim/issues/4922 diff --git a/timeutils.nimble b/timeutils.nimble index 9d4e769..bf01b76 100644 --- a/timeutils.nimble +++ b/timeutils.nimble @@ -1,6 +1,6 @@ # Package -version = "0.4.0" +version = "0.5.0" author = "Jonathan Bernard" description = "Utility methods to fill in the lacking time support in Nim\'s stdlib. This is holding me over until I can write a proper time module for the stdlib and submit it." license = "BSD3"