[Python-checkins] python/nondist/sandbox/datetime US.py,1.8,1.9

tim_one@users.sourceforge.net tim_one@users.sourceforge.net
2002年12月27日 11:27:39 -0800


Update of /cvsroot/python/python/nondist/sandbox/datetime
In directory sc8-pr-cvs1:/tmp/cvs-serv5785
Modified Files:
	US.py 
Log Message:
In the doctest, fleshed out the traps when DST begins.
Index: US.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/US.py,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** US.py	27 Dec 2002 06:36:52 -0000	1.8
--- US.py	27 Dec 2002 19:27:37 -0000	1.9
***************
*** 42,46 ****
 # of 2:MM:SS on that day doesn't make sense. We arbitrarily decide it
 # intends DST then, making it a redundant spelling of 1:MM:SS standard
! # on that day.
 
 dstoff = timedelta(hours=1)
--- 42,48 ----
 # of 2:MM:SS on that day doesn't make sense. We arbitrarily decide it
 # intends DST then, making it a redundant spelling of 1:MM:SS standard
! # on that day. A consequence of the redundant spelling is that
! # this timezone -> UTC -> this timezone can't always be an identity on
! # this end of the scale.
 
 dstoff = timedelta(hours=1)
***************
*** 123,127 ****
 Sun Apr 7 01:59:59 2002
 
! Right when DST starts.
 >>> after = before + timedelta(seconds=1)
 >>> printstuff(after)
--- 125,129 ----
 Sun Apr 7 01:59:59 2002
 
! Right when DST starts -- although this doesn't work very well.
 >>> after = before + timedelta(seconds=1)
 >>> printstuff(after)
***************
*** 155,158 ****
--- 157,186 ----
 0:59:59
 
+ Converting 'after' to UTC and back again isn't an identity, because, as
+ above, 2 is taken as being in DST, a synonym for 1 in standard time:
+ 
+ >>> printstuff(after.astimezone(utc).astimezone(Eastern)) # 1:00 standard
+ 2002年04月07日 01:00:00-05:00
+ EST
+ (2002, 4, 7, 1, 0, 0, 6, 97, 0)
+ Sun Apr 7 01:00:00 2002
+ 
+ To get the start of DST in a robust way, we have to give the "naive clock"
+ time of 3:
+ 
+ >>> after = after.replace(hour=3)
+ >>> printstuff(after)
+ 2002年04月07日 03:00:00-04:00
+ EDT
+ (2002, 4, 7, 3, 0, 0, 6, 97, 1)
+ Sun Apr 7 03:00:00 2002
+ >>> printstuff(after.astimezone(utc).astimezone(Eastern)) # now an identity
+ 2002年04月07日 03:00:00-04:00
+ EDT
+ (2002, 4, 7, 3, 0, 0, 6, 97, 1)
+ Sun Apr 7 03:00:00 2002
+ >>> print after.astimezone(utc) - before.astimezone(utc)
+ 0:00:01
+ 
 Now right before DST ends.
 >>> before = datetimetz(2002, 10, 27, 1, 59, 59, tzinfo=Eastern)
***************
*** 183,187 ****
 
 One more glitch: that one-hour gap contains times that can't be represented
! in Eastern. Here's one of them:
 
 >>> phantom = before.astimezone(utc) + timedelta(seconds=1)
--- 211,216 ----
 
 One more glitch: that one-hour gap contains times that can't be represented
! in Eastern (all times of the form 6:MM:SS UTC on this day). Here's one of
! them:
 
 >>> phantom = before.astimezone(utc) + timedelta(seconds=1)
***************
*** 203,207 ****
 We get *something*, of course, but converting it back to UTC isn't an
 identity (not because of a bug in Eastern, but because this particular
! UTC time simply has no spelling in Eastern).
 
 >>> printstuff(paradox.astimezone(utc))
--- 232,238 ----
 We get *something*, of course, but converting it back to UTC isn't an
 identity (not because of a bug in Eastern, but because this particular
! UTC time simply has no spelling in Eastern: 6:MM:SS UTC would be
! 1:MM:SS in EST or 2:MM:SS in EDT, but Eastern takes 1:MM:SS as being
! daylight and 2:MM:SS as being standard on this day):
 
 >>> printstuff(paradox.astimezone(utc))

AltStyle によって変換されたページ (->オリジナル) /