Python将来五分钟创buildunix时间戳

我必须在将来5分钟创build一个“过期”值,但是我必须以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 

有没有一个模块或function,为我做时间戳转换?

另一种方法是使用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) 

这是你需要的:

 import time import datetime n = datetime.datetime.now() unix_time = time.mktime(n.timetuple()) 

您可以使用datetime.strftime以时代forms获取时间,使用%s格式的string:

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

这是一个较less的基于datetime的解决scheme,从datetime对象转换为posix timestamp:

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

在Python中将datetime.date转换为UTC时间戳 。

 def in_unix(input): start = datetime.datetime(year=1970,month=1,day=1) diff = input - start return diff.total_seconds() 

关键是要确保在开始转换之前,所有使用的date都在utc时区。 请参阅http://pytz.sourceforge.net/以了解如何正确执行此操作。; 通过标准化为utc,可以消除夏时制转换的不明确性。 然后,您可以安全地使用timedelta来计算unix时代的距离,然后转换为秒或毫秒。

请注意,生成的unix时间戳本身就是UTC时区。 如果您希望在本地时区中查看时间戳,则需要进行另一次转换。

另外请注意,这只适用于1970年以后的date。

  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 

以下是基于上面的答案(再加上一个毫秒的更正),并且在使用时区的3.3之前模拟Python 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是简单date的一部分。 但是如果你使用的是这个包,你可能会input:

 SimpleDate(my_datetime).timestamp + 5 * 60 

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

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

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