关于python:将日期转换为秒

Convert date to seconds

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
$ convdate="Jul  1 12:00:00 2015 GMT"

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

1435752000

来自GNU date(1)手册页

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


据我所知,Unix将日期表示为从1970年1月1日开始的偏移量,因此为了在Python中实现这一点,您可以得到时间增量。尤其是对于您的示例:

1
2
3
4
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


1
2
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的时间戳,可以这样做:

1
2
3
>>> from datetime import timezone
>>> x.replace(tzinfo=timezone.utc).timestamp()
1435752000.0


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

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


您尝试进行的转换称为"从epoch开始的秒数",并使用类似于下面的函数计算:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
>>> 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时间(a))。

希望有帮助!