将日期转换为秒数

5

我正在寻找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'

请查看将日期时间格式转换为秒 - askewchan
4个回答

7
据我所知,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()

The output is

1435752000.0


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

1

mktime 可以用来计算输入的时间(秒):

>>> import time
>>> m = time.localtime()#store it in a var 
>>> time.mktime(m)
o/p: 1435657461.0

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))

希望能对你有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接