我必须在未来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
import datetime
n = datetime.datetime.now()
unix_time = time.mktime(n.timetuple())

其他回答

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

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

注意: 这只适用于linux,并且该方法不适用于时区。

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

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

运行时环境 操作系统:Ubuntu 16.04 Python 3.6

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

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

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

查看更多详细信息,在转换日期时间。在Python中,date转换为UTC时间戳。

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

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

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