我必须在未来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

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


当前回答

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

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

这是你需要的:

import time
import datetime
n = datetime.datetime.now()
unix_time = time.mktime(n.timetuple())
def in_unix(input):
  start = datetime.datetime(year=1970,month=1,day=1)
  diff = input - start
  return diff.total_seconds()

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

import time
def expires():
    '''return a UNIX style timestamp representing 5 minutes from now'''
    return int(time.time()+300)
def expiration_time():
    import datetime,calendar
    timestamp = calendar.timegm(datetime.datetime.now().timetuple())
    returnValue = datetime.timedelta(minutes=5).total_seconds() + timestamp
    return returnValue