如何从gmtime()的时间+日期输出中获取自纪元以来的秒数?

cal*_*pto 150 python time datetime

你如何做反向gmtime(),你把时间+日期和获得秒数?

我有类似的字符串'Jul 9, 2009 @ 20:02:58 UTC',我想要回到2009年7月9日之间的秒数.

我已经尝试time.strftime但我不知道如何正确使用它,或者它是否是正确的命令使用.

nar*_*ren 568

使用时间模块:

epoch_time = int(time.time())
Run Code Online (Sandbox Code Playgroud)

  • 这是utc,因此我发现它更正确 (34认同)
  • 请注意,这不是OP所要求的,但它是*我想要的.所以+1. (27认同)
  • @DanJ:它是自大纪元以来经过的秒数(固定的时刻),在任何时区都是相同的.虽然如果我们忽略闰秒的时间实例; 如果`time`使用Unix epoch(1970),很容易将它转换为UTC. (13认同)
  • 它是标题中提到的答案的答案:"从时代开始获得时间".+1 (5认同)
  • 扩展[我的评论](http://stackoverflow.com/questions/4548684/how-to-get-the-seconds-since-epoch-from-the-time-date-output-of-gmtime-in- py#comment29834679_13342744):`time.time()`值不依赖于本地时区(如果我们排除"正确"时区等),例如,如果它返回POSIX时间(就像在大多数系统上那样)那么它是自大纪元(1970-01-01UTC)以来的SI秒数不计算闰秒.此值*可以*转换为UTC(不包括闰秒),但*不是UTC*.@MarlonAbeykoon:我喜欢[这个答案](http://stackoverflow.com/a/21858377/4279) (2认同)

nmi*_*els 114

你想要的time.gmtime().

>>> calendar.timegm(time.gmtime())
1293581619.0
Run Code Online (Sandbox Code Playgroud)

你可以将你的字符串变成一个时间元组calendar.timegm(),它返回一个你可以传递给的时间元组time.strptime():

>>> import calendar
>>> import time
>>> calendar.timegm(time.strptime('Jul 9, 2009 @ 20:02:58 UTC', '%b %d, %Y @ %H:%M:%S UTC'))
1247169778
Run Code Online (Sandbox Code Playgroud)

有关日历模块的更多信息点击这里

  • 如果您正在寻找当前的unix纪元时间,请参阅@ DanJ的评论或naren的回答,这个答案是错误的! (16认同)
  • @NathanChappell 搜索引擎优化很奇怪,“如何获取自纪元以来的秒数”是许多人阅读的问题的唯一部分。请参阅上面的评论,表明该答案是不正确的,因为它回答了实际提出的问题。 (2认同)

unu*_*tbu 9

请注意,time.gmtime将时间戳映射01970-1-1 00:00:00.

In [61]: import time       
In [63]: time.gmtime(0)
Out[63]: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
Run Code Online (Sandbox Code Playgroud)

time.mktime(time.gmtime(0)) 为您提供一个时间戳,该时间戳取决于您的语言环境,通常可能不是0.

In [64]: time.mktime(time.gmtime(0))
Out[64]: 18000.0
Run Code Online (Sandbox Code Playgroud)

倒数time.gmtimecalendar.timegm:

In [62]: import calendar    
In [65]: calendar.timegm(time.gmtime(0))
Out[65]: 0
Run Code Online (Sandbox Code Playgroud)


use*_*167 6

ep = datetime.datetime(1970,1,1,0,0,0)
x = (datetime.datetime.utcnow()- ep).total_seconds()
Run Code Online (Sandbox Code Playgroud)

这应该是不同的int(time.time()),但使用类似的东西是安全的x % (60*60*24)

datetime - 基本日期和时间类型:

与时间模块不同,datetime模块不支持闰秒.


Fal*_*rri 5

t = datetime.strptime('Jul 9, 2009 @ 20:02:58 UTC',"%b %d, %Y @ %H:%M:%S %Z")
Run Code Online (Sandbox Code Playgroud)