summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authorFelix Krause <contact@flyx.org>2016-11-14 18:46:35 +0100
committerFelix Krause <contact@flyx.org>2016-11-14 18:46:35 +0100
commit434c27343e72c4e90530d9b90c0851bc20c8ea32 (patch)
treea7179e63b1a27269bb8a3b087ced41d834b1abb8 /lib
parent0587a578075498dffaadbe7cf0ba1885eb597536 (diff)
downloadNim-434c27343e72c4e90530d9b90c0851bc20c8ea32.tar.gz
Parse 'Z' as valid timezone if offset is expected
Diffstat (limited to 'lib')
-rw-r--r--lib/pure/times.nim18
1 files changed, 15 insertions, 3 deletions
diff --git a/lib/pure/times.nim b/lib/pure/times.nim
index ef23c4cf9..0ab14e183 100644
--- a/lib/pure/times.nim
+++ b/lib/pure/times.nim
@@ -1090,29 +1090,42 @@ proc parseToken(info: var TimeInfo; token, value: string; j: var int) =
     info.year = value[j..j+3].parseInt()
     j += 4
   of "z":
+    info.isDST = false
     if value[j] == '+':
       info.timezone = 0 - parseInt($value[j+1]) * secondsInHour
     elif value[j] == '-':
       info.timezone = parseInt($value[j+1]) * secondsInHour
+    elif value[j] == 'Z':
+      info.timezone = 0
+      j += 1
+      return
     else:
       raise newException(ValueError,
         "Couldn't parse timezone offset (z), got: " & value[j])
-    info.isDST = false
     j += 2
   of "zz":
+    info.isDST = false
     if value[j] == '+':
       info.timezone = 0 - value[j+1..j+2].parseInt() * secondsInHour
     elif value[j] == '-':
       info.timezone = value[j+1..j+2].parseInt() * secondsInHour
+    elif value[j] == 'Z':
+      info.timezone = 0
+      j += 1
+      return
     else:
       raise newException(ValueError,
         "Couldn't parse timezone offset (zz), got: " & value[j])
-    info.isDST = false
     j += 3
   of "zzz":
+    info.isDST = false
     var factor = 0
     if value[j] == '+': factor = -1
     elif value[j] == '-': factor = 1
+    elif value[j] == 'Z':
+      info.timezone = 0
+      j += 1
+      return
     else:
       raise newException(ValueError,
         "Couldn't parse timezone offset (zzz), got: " & value[j])
@@ -1120,7 +1133,6 @@ proc parseToken(info: var TimeInfo; token, value: string; j: var int) =
     j += 4
     info.timezone += factor * value[j..j+1].parseInt() * 60
     j += 2
-    info.isDST = false
   else:
     # Ignore the token and move forward in the value string by the same length
     j += token.len