datetime - python创建五分钟前的unix时间戳

  显示原文与译文双语对照的内容

在未来我必须创建一个"过期"值 5分钟,但我必须以UNIX时间戳格式提供它。 我现在有这个,但它似乎是一个黑客。


def expires():
 '''return a UNIX style timestamp representing 5 minutes from now'''
 epoch = datetime.datetime(1970, 1, 1)
 seconds_in_a_day = 60 * 60 * 24
 five_minutes = datetime.timedelta(seconds=5*60)
 five_minutes_from_now = datetime.datetime.now() + five_minutes
 since_epoch = five_minutes_from_now - epoch
 return since_epoch.days * seconds_in_a_day + since_epoch.seconds

是否有一个模块或者函数对我进行时间戳转换?

时间:

另一种方法是使用 calendar.timegm:


future = datetime.datetime.utcnow() + datetime.timedelta(minutes=5)
return calendar.timegm(future.timetuple())

它也比 %s 标志更便携到 strftime ( 在 Windows 上不起作用) 。

现在 python> = 3.3你可以调用 timestamp() 方法获取时间戳作为一个浮点数。


import datetime
current_time = datetime.datetime.now(datetime.timezone.utc)
unix_timestamp = current_time.timestamp() # works if Python> = 3.3

unix_timestamp_plus_5_min = unix_timestamp + (5 * 60) # 5 min * 60 seconds

我刚找到它,它的更短。


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

你可以使用 datetime.strftime 使用 %s 格式字符串来获取时间格式的时间:


def expires():
 future = datetime.datetime.now() + datetime.timedelta(seconds=5*60)
 return int(future.strftime("%s"))

下面是一个较小的datetime -based解决方案,可以从datetime对象转换为posix时间戳:


future = datetime.datetime.utcnow() + datetime.timedelta(minutes=5)
return (future - datetime.datetime(1970, 1, 1)).total_seconds()

看到更多的细节在 datetime.date 转化为utc时间戳 python

关键是在开始转换之前,确保使用的所有日期都在utc时区。 请参见 http://pytz.sourceforge.net/,了解如何正确执行。 通过规范化到 utc,可以消除夏时制转换的模糊性。 然后,你可以安全地使用timedelta来计算来自unix纪元的距离,然后转换为秒或者毫秒。

注意,结果的unix时间戳本身在UTC时区。 如果希望在本地化时区中查看时间戳,则需要进行另一个转换。

注意,这只对 1970之后的日期有效。


 import datetime
 import pytz

 UNIX_EPOCH = datetime.datetime(1970, 1, 1, 0, 0, tzinfo = pytz.utc)
 def EPOCH(utc_datetime):
 delta = utc_datetime - UNIX_EPOCH
 seconds = delta.total_seconds()
 ms = seconds * 1000
 return ms

以下是根据上面的答案( 加上毫秒的修正) 和模拟 datetime.timestamp() python 3 3.3之前使用时区时。


def datetime_timestamp(datetime):
 '''
 Equivalent to datetime.timestamp() for pre-3.3
 '''
 try:
 return datetime.timestamp()
 except AttributeError:
 utc_datetime = datetime.astimezone(utc)
 return timegm(utc_datetime.timetuple()) + utc_datetime.microsecond/1e6

要严格回答问题,你需要:


datetime_timestamp(my_datetime) + 5 * 60

datetime_timestampsimple-date的一部分。 但是如果你使用那个软件包,你可能会喜欢:


SimpleDate(my_datetime).timestamp + 5 * 60

为my_datetime处理更多的格式/类型。


def expiration_time():
 import datetime,calendar
 timestamp = calendar.timegm(datetime.datetime.now().timetuple())
 returnValue = datetime.timedelta(minutes=5).total_seconds() + timestamp
 return returnValue

...