[Python-checkins] CVS: python/nondist/sandbox/datetime datetime.py,1.26,1.27 test_datetime.py,1.18,1.19

Guido van Rossum gvanrossum@users.sourceforge.net
Sun, 03 Mar 2002 13:24:35 -0800


Update of /cvsroot/python/python/nondist/sandbox/datetime
In directory usw-pr-cvs1:/tmp/cvs-serv20056

Modified Files:
	datetime.py test_datetime.py 
Log Message:
- Add isoformat() and utcisoformat(), returning ISO style timestamps.
- Use isoformat(' ') in __str__.


Index: datetime.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/datetime.py,v
retrieving revision 1.26
retrieving revision 1.27
diff -C2 -d -r1.26 -r1.27
*** datetime.py	3 Mar 2002 20:52:29 -0000	1.26
--- datetime.py	3 Mar 2002 21:24:33 -0000	1.27
***************
*** 324,327 ****
--- 324,329 ----
      strftime(), utcstrftime()
      toordinal()
+     weekday(), isoweekday(), isocalendar()
+     isoformat(), utcisoformat()
  
      Properties (readonly):
***************
*** 438,450 ****
      def __str__(self):
          "Convert to pretty string, for str()."
!         if self.__tzoffset == 0:
!             return self.ctime() + " UTC"
!         if self.__tzoffset > 0:
!             h, m = divmod(self.__tzoffset, 60)
!         else:
!             h, m = divmod(-self.__tzoffset, 60)
!             h = -h
!         # XXX This is broken!  ctime() renormalizes to local time. :-(
!         return self.ctime() + " %+03d:%02d" % (h, m)
  
      # Read-only field accessors
--- 440,444 ----
      def __str__(self):
          "Convert to pretty string, for str()."
!         return self.isoformat(sep=' ')
  
      # Read-only field accessors
***************
*** 669,672 ****
--- 663,701 ----
                  week = 0
          return year, week+1, day+1
+ 
+     def isoformat(self, sep='T'):
+         """Return the time formatted according to ISO.
+ 
+         This is 'YYYY-MM-DD HH:MM:SS.mmmmmm-xx:yy'
+         where -xx:yy is the timezone offset.
+ 
+         Optional argument sep specifies the separator between date and
+         time, default 'T'.
+ 
+         This method does not convert to local time.
+         """
+         if self.__tzoffset >= 0:
+             h, m = divmod(self.__tzoffset, 60)
+         else:
+             h, m = divmod(-self.__tzoffset, 60)
+             h = -h
+         return "%04d-%02d-%02d%c%02d:%02d:%02d.%06d%+03d:%02d" % (
+             self.__year, self.__month, self.__day,
+             sep,
+             self.__hour, self.__minute, self.__second,
+             self.__microsecond,
+             h, m)
+ 
+     def utcisoformat(self, sep='T'):
+         """Return the time as UTC formatted according to ISO.
+ 
+         This is 'YYYY-MM-DD HH:MM:SS.mmmmmmZ'.
+ 
+         Optional argument sep specifies the separator between date and
+         time, default 'T'.
+         """
+         y, m, d, hh, mm = self._utc_ymdHM()
+         return "%04d-%02d-%02d%c%02d:%02d:%02d.%06dZ" % (
+             y, m, d, sep, hh, mm, self.__second, self.__microsecond)
  
  

Index: test_datetime.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/test_datetime.py,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -d -r1.18 -r1.19
*** test_datetime.py	3 Mar 2002 20:52:29 -0000	1.18
--- test_datetime.py	3 Mar 2002 21:24:33 -0000	1.19
***************
*** 295,298 ****
--- 295,305 ----
          self.assertEqual(L, iso_long_years)
  
+     def test_isoformat(self):
+         t = datetime(2, 3, 2, 4, 5, 1, 123, tzoffset=-120)
+         self.assertEqual(t.isoformat(),    "0002-03-02T04:05:01.000123-02:00")
+         self.assertEqual(t.isoformat(' '), "0002-03-02 04:05:01.000123-02:00")
+         self.assertEqual(t.utcisoformat(),    "0002-03-02T06:05:01.000123Z")
+         self.assertEqual(t.utcisoformat(' '), "0002-03-02 06:05:01.000123Z")
+ 
      def test_tmxxx(self):
          from datetime import tmxxx