如何将当前日期转换为UNIX时间戳?

69

如何将当前日期转换为Unix时间戳?

格式化当前日期:

29.08.2011 11:05:02
9个回答

108

应该就是这样了。

import time

date_time = '29.08.2011 11:05:02'
pattern = '%d.%m.%Y %H:%M:%S'
epoch = int(time.mktime(time.strptime(date_time, pattern)))
print epoch

5
使用mktime函数,是否意味着需要将返回的纪元时间调整为UTC? - ChuckCottrill
Python3 是一样的吗? - Bluscream

23

如果'TZ'没有设置正确,例如'UTC'或者'Asia/Kolkata',你的代码将表现出奇怪的行为。

因此,你需要执行以下操作:

>>> import time, os
>>> d='2014-12-11 00:00:00'
>>> p='%Y-%m-%d %H:%M:%S'
>>> epoch = int(time.mktime(time.strptime(d,p)))
>>> epoch
1418236200
>>> os.environ['TZ']='UTC'
>>> epoch = int(time.mktime(time.strptime(d,p)))
>>> epoch
1418256000

一个笔误,你的代码片段应该是:os.environ['TZ']='UTC'。请注意,键TZ带有'。 - sateesh
这应该是被接受的答案。时区调整非常关键。 - Tushar Vazirani

14
假设您使用的是24小时制时间格式:
import time;
t = time.mktime(time.strptime("29.08.2011 11:05:02", "%d.%m.%Y %H:%M:%S"));

6
import time
def expires():
    '''return a UNIX style timestamp representing 5 minutes from now'''
    return int(time.time()+300)

4
from time import time
>>> int(time())
1542449530


>>> time()
1542449527.6991141
>>> int(time())
1542449530
>>> str(time()).replace(".","")
'154244967282'

But Should it not return ?

'15424495276991141'

1
time.time() 返回当前秒数,从纪元开始计算(POSIX 时间),返回值为浮点数,不需要调整 datetime.now()。如果确实想要使用 datetime.now(),它有一个 .timestamp 方法,可以返回相同的结果。 - Andrew
你的意思是像这样吗? - aks
我认为 int(time()) 正是这个问题的答案。我不敢相信在18个月后这个回答还没有赞。 - user1717828

4

如果你想要UTC时间,可以尝试使用一些gm函数:

import time
import calendar

date_time = '29.08.2011 11:05:02'
pattern = '%d.%m.%Y %H:%M:%S'
utc_epoch = calendar.timegm(time.strptime(date_time, pattern))
print utc_epoch

4
使用Python将日期/时间转换为Epoch(不带微秒)的简写方式。
int(current_date.strftime("%s")) # 2020-01-14  ---> 1578956400
int(current_datetime.strftime("%s")) # 2020-01-14 16:59:30.251176 -----> 1579017570

NameError: name 'current_datetime' is not defined - Brad Hein
1
current_datetime是您要转换的输入日期。 - pymen

3
使用 strptime 函数解析时间,然后调用 time() 函数获取 Unix 时间戳。

1

这里输入图像描述我认为这个答案需要更新,解决方案应该更好地呈现出来。

from datetime import datetime

datetime.strptime("29.08.2011 11:05:02", "%d.%m.%Y %H:%M:%S").strftime("%s")

或者您可以使用datetime对象,并使用%s格式化时间以将其转换为时代时间。

注意:在 Windows 中不支持“%s”。 - sushanth

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