changeset 29638:491ee264b9f6 stable

date: accept broader range of ISO 8601 time specs The "normal" ISO date/time includes a T between date and time. It also allows dropping the colons and seconds from the timespec. Add new patterns for these forms as well as tests.
author Matt Mackall <mpm@selenic.com>
date Wed, 27 Jul 2016 15:22:36 -0500
parents 46b2ccce7fde
children 6fd751fa58d3
files mercurial/util.py tests/test-parse-date.t
diffstat 2 files changed, 36 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/util.py	Wed Jul 27 15:20:34 2016 -0500
+++ b/mercurial/util.py	Wed Jul 27 15:22:36 2016 -0500
@@ -440,7 +440,14 @@
 
 # used by parsedate
 defaultdateformats = (
-    '%Y-%m-%d %H:%M:%S',
+    '%Y-%m-%dT%H:%M:%S', # the 'real' ISO8601
+    '%Y-%m-%dT%H:%M',    #   without seconds
+    '%Y-%m-%dT%H%M%S',   # another awful but legal variant without :
+    '%Y-%m-%dT%H%M',     #   without seconds
+    '%Y-%m-%d %H:%M:%S', # our common legal variant
+    '%Y-%m-%d %H:%M',    #   without seconds
+    '%Y-%m-%d %H%M%S',   # without :
+    '%Y-%m-%d %H%M',     #   without seconds
     '%Y-%m-%d %I:%M:%S%p',
     '%Y-%m-%d %H:%M',
     '%Y-%m-%d %I:%M%p',
--- a/tests/test-parse-date.t	Wed Jul 27 15:20:34 2016 -0500
+++ b/tests/test-parse-date.t	Wed Jul 27 15:22:36 2016 -0500
@@ -258,3 +258,31 @@
   $ hg log -d today --template '{desc}\n'
   Explicitly committed now.
   today is a good day to code
+
+Test parsing various ISO8601 forms
+
+  $ hg debugdate "2016-07-27T12:10:21"
+  internal: 1469646621 * (glob)
+  standard: Wed Jul 27 12:10:21 2016 -0700
+  $ hg debugdate "2016-07-27T12:10:21Z"
+  internal: 1469621421 0
+  standard: Wed Jul 27 12:10:21 2016 +0000
+  $ hg debugdate "2016-07-27T12:10:21+00:00"
+  internal: 1469621421 0
+  standard: Wed Jul 27 12:10:21 2016 +0000
+  $ hg debugdate "2016-07-27T121021Z"
+  internal: 1469621421 0
+  standard: Wed Jul 27 12:10:21 2016 +0000
+
+  $ hg debugdate "2016-07-27 12:10:21"
+  internal: 1469646621 * (glob)
+  standard: Wed Jul 27 12:10:21 2016 -0700
+  $ hg debugdate "2016-07-27 12:10:21Z"
+  internal: 1469621421 0
+  standard: Wed Jul 27 12:10:21 2016 +0000
+  $ hg debugdate "2016-07-27 12:10:21+00:00"
+  internal: 1469621421 0
+  standard: Wed Jul 27 12:10:21 2016 +0000
+  $ hg debugdate "2016-07-27 121021Z"
+  internal: 1469621421 0
+  standard: Wed Jul 27 12:10:21 2016 +0000