4

我正在寻找 python 等效GNU date(1)选项。基本上我想将日期转换为秒,如下例所示,我尝试从 python 文档中查看,但我找不到等效的时间模块。

$ convdate="Jul  1 12:00:00 2015 GMT"

$ date '+%s' --date "$convdate"

1435752000

GNU date(1)手册页

-d, --date=STRING
              display time described by STRING, not 'now'
4

4 回答 4

6

据我了解,UNIX 将日期表示为 1970 年 1 月 1 日的偏移量,因此为了在 python 中执行此操作,您可以获得时间增量。特别是对于您的示例:

from datetime import datetime
a = datetime.strptime(convdate, "%b %d %H:%M:%S %Y %Z")
b = datetime(1970, 1, 1)
(a-b).total_seconds()

输出是

1435752000.0

于 2013-10-10T18:57:49.247 回答
3
>>> x = datetime.strptime('Jul 1 12:00:00 2015 GMT', '%b %d %H:%M:%S %Y %Z')
>>> x.timestamp()
1435744800.0

请注意,这是一个本地时间戳。我的时区是 UTC+2,因此比您预期的时间少 2 小时。如果你想要一个基于 UTC 的时间戳,你可以这样做:

>>> from datetime import timezone
>>> x.replace(tzinfo=timezone.utc).timestamp()
1435752000.0
于 2013-10-10T18:56:05.383 回答
1

您尝试进行的转换称为“自纪元以来的秒数”,并使用如下函数计算:

def unix_time(dt):
    epoch = datetime.datetime.utcfromtimestamp(0)
    delta = dt - epoch
    return delta.total_seconds()

您可以直接使用日期的每个部分加载日期时间,也可以从字符串中加载并计算秒数:

>>> def unix_time(dt):
...     epoch = datetime.datetime.utcfromtimestamp(0)
...     delta = dt - epoch
...     return delta.total_seconds()
...
>>> import datetime
>>> a = datetime.datetime(2015, 07, 01, 12, 00, 00)
>>> print a
2015-07-01 12:00:00
>>> print unix_time(a)
1435752000.0
>>>

注意:如果你想摆脱最后一个 .0,你可以使用 long(unix_time(a))

希望能帮助到你!

于 2013-10-10T18:51:34.577 回答
1

mktime可用于计算输入的时间(以秒为单位):

>>> import time
>>> m = time.localtime()#store it in a var 
>>> time.mktime(m)
o/p: 1435657461.0
于 2015-06-30T09:45:54.197 回答