2009-12-29 144 views
0

是否有可以处理千年的历元时间转换器?具有千年时间范围的历元时间戳转换器,蟒蛇

time.gmtime(1000 * 365 * 24 * 60 * 60) 

抛出

ValueError: timestamp out of range for platform time_t 
+0

这将在使用64位库的64位平台上正常工作。它会失败(如你所见)在32位平台 – 2011-09-07 20:50:18

回答

0

是的,至少在Windows上(使用Windows 7在这里)。你在使用什么平台?

Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on win32 
>>> time.gmtime(1000*365*24*60*60) 
time.struct_time(tm_year=2969, tm_mon=5, tm_mday=3, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=123, tm_isdst=0) 

而且,即使在Linux上,你应该能够使用datetime module做日期的一些处理远远超出2038。该文件说MAXYEAR是9999该模块:

>>> dt = datetime.datetime.now().replace(year=1000+1971) 
>>> dt 
datetime.datetime(2971, 12, 29, 11, 43, 20, 727000) 
>>> dt.timetuple() 
time.struct_time(tm_year=2971, tm_mon=12, tm_mday=29, tm_hour=11, tm_min=41, tm_sec=16, tm_wday=6, tm_yday=363, tm_isdst=-1) 

当然,这最后一次通话可能不会在Linux中,如果time.gmtime()调用失败的工作,但因为你还没有真正说你想要做什么与日期也许这是足够的现在。

+0

我在macosx上。 奇怪的是,它确实允许 “datetime.datetime(2971,12,29,11,43,20,727000)” 没有错误。 – jeremy 2009-12-29 16:49:58

+0

@_jeremy,没有什么奇怪的,因为datetime对象应该在所有平台上支持它。这是'.timetuple()'调用,我期望在'time.gmtime()'调用失败的任何地方都会失败。 – 2009-12-29 18:26:11