将ISO 8601时间格式转换为UNIX时间戳(纪元)并再次返回而又不损失小数秒的Python方法?
我找到了几个示例,但所有示例似乎都在转换的某个点上减少了小数秒。下面的例子...
问题似乎是最初转换为UNIX时间戳(时期)。下面的代码。
def ISO8601ToEpoch(theString):
from datetime import datetime
import calendar
return calendar.timegm(datetime.strptime(theString, "%Y-%m-%dT%H:%M:%S.%f").timetuple())
def EpochToISO8601(theEpoch):
from datetime import datetime
return datetime.fromtimestamp(theEpoch).isoformat()
#
print 'Original Time {0}'.format('2018-04-27T04:19:51.050937')
theTime=ISO8601ToEpoch('2018-04-27T04:19:51.050937')
print 'Time {0}'.format(theTime)
print 'Original Time {0}'.format(EpochToISO8601(theTime)
结果是...
原始时间2018-04-27T04:19:51.050937时间1524802791原始时间2018-04-27T04:19:51
有没有办法让时间元组不浪费小数秒?
这里的问题是,您正在将一个可以datetime
理解的微秒转换成一个不能理解的微秒timetuple
。1个
显而易见的解决方法是不这样做。
如果要将datetime
对象转换为时间戳,只需使用timestamp
方法,就如同您已经使用fromtimestamp
classmethod的方法一样。
1.您也许可以欺骗atimetuple
持有afloat
而不是int
几秒钟。但是,那么您将破坏类型的不变式。而且,更重要的是,击败了该类型的全部目的,该目的与1980年代的C类型相同struct tm
。并且可能还会破坏该timegm
函数,该函数可能仅调用同名的C函数。(相对于,这是一个为Python设计的友好模块,大多数time
模块是C的薄包装。)然后有文献记载,它返回一个整数类型,因此即使您走了那么远,也都没有用。 。<time.h>
datetime
timegm
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句