Python将来五分钟创建unix时间戳

时间:2010-05-05 18:38:45

标签: python datetime unix-timestamp

我必须在未来5分钟创建一个“Expires”值,但我必须以UNIX Timestamp格式提供它。到目前为止,我有这个,但它似乎是一个黑客。

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

是否存在为我执行时间戳转换的模块或函数?

11 个答案:

答案 0 :(得分:347)

另一种方法是使用calendar.timegm

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

它比%s的{​​{1}}标志更便携(在Windows上不起作用)。

答案 1 :(得分:153)

现在使用Python> = 3.3 ,您只需调用timestamp() method即可将时间戳作为浮点数。

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

答案 2 :(得分:137)

刚发现这个,它甚至更短。

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

答案 3 :(得分:57)

这就是你需要的:

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

答案 4 :(得分:47)

您可以使用datetime.strftime使用%s格式字符串以Epoch格式获取时间:

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

答案 5 :(得分:11)

这是一个基于datetime的破解较少的解决方案,可以从datetime对象转换为posix时间戳:

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

点击Converting datetime.date to UTC timestamp in Python了解详情。

答案 6 :(得分:6)

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

答案 7 :(得分:4)

关键是在开始转换之前确保您使用的所有日期都在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

答案 8 :(得分:4)

以下是基于上面的答案(加上毫秒的校正),并在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_timestampsimple-date的一部分。但如果您使用的是该软件包,则可以输入:

SimpleDate(my_datetime).timestamp + 5 * 60

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

答案 9 :(得分:1)

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

答案 10 :(得分:1)

请注意,timedelta.total_seconds()的解决方案适用于python-2.7 +。 将calendar.timegm(future.utctimetuple())用于较低版本的Python。