创建未来5分钟的unix时间戳

我必须在未来5分钟内创建一个“Expires”值,但是我必须以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

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

273879 次浏览

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

def expires():
future = datetime.datetime.now() + datetime.timedelta(seconds=5*60)
return int(future.strftime("%s"))
< p >注意: 此方法仅在linux下有效,且不适用于时区

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

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

它也比%s标志更易于移植到strftime(在Windows上不工作)。

刚刚发现了这个,它更短。

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

关键是在开始转换之前,要确保使用的所有日期都位于utc时区。参见http://pytz.sourceforge.net/来学习如何正确地做到这一点。通过规范化为utc,可以消除夏令时转换的模糊性。然后,您可以安全地使用timedelta来计算到unix epoch的距离,然后转换为秒或毫秒。

注意,生成的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
def in_unix(input):
start = datetime.datetime(year=1970,month=1,day=1)
diff = input - start
return diff.total_seconds()

下面是一个较少破坏的基于__abc0的解决方案,用于将datetime对象转换为posix时间戳:

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

详见将datetime。在Python中,date转换为UTC时间戳

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

现在在Python中>= 3.3你可以直接调用时间戳()方法来获取时间戳作为浮点数。

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
import datetime
n = datetime.datetime.now()
unix_time = time.mktime(n.timetuple())

以下是基于上面的答案(加上对毫秒的修正),并在使用时区时模拟Python 3 3.3之前的datetime.timestamp()

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_timestamp简单的日期的一部分。但如果你正在使用这个包,你可能会输入:

SimpleDate(my_datetime).timestamp + 5 * 60

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

注意带有timedelta.total_seconds()的解决方案可以在python-2.7+上工作。 对于较低版本的Python,使用calendar.timegm(future.utctimetuple())

这个方法如何使用内置的时间戳函数?代码片段在不同的时间(不仅仅是当前时间)工作。

import datetime


a = "2017-01-01 14:30:00"
b = datetime.datetime.strptime(a, '%Y-%m-%d %H:%M:%S')
c = int(b.timestamp()/60.0)
alarm_time = c + 5
< p >运行时环境 操作系统:Ubuntu 16.04 Python 3.6 < / p >