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

Dan*_*den 295 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
Run Code Online (Sandbox Code Playgroud)

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

Cat*_*lus 347

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

future = datetime.datetime.utcnow() + datetime.timedelta(minutes=5)
return calendar.timegm(future.timetuple())
Run Code Online (Sandbox Code Playgroud)

它也比%sflag 更便携strftime(在Windows上不起作用).

  • 请注意,结合前两个注释,正确的解决方案是:`calendar.timegm(future.utctimetuple())`.这可确保将UTC时间传递到`calendar.timegm`. (12认同)

Tim*_*all 153

现在在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
Run Code Online (Sandbox Code Playgroud)

  • +1为此.它应该显示得更高,因为它是在Python 3中如何做到这一点的干净方式 (4认同)
  • @ scott654我认为在评论开头就把它弄得很清楚,但我也加了一些大胆的内容. (2认同)
  • [当地时间可能不明确](http://pytz.sourceforge.net/#problems-with-localtime).示例(`datetime.now()`)很糟糕,因为它鼓励使用表示本地时间的天真日期时间对象,并且在DST转换期间可能会失败(由于固有的模糊性).您可以使用`ts = datetime.now(timezone.utc).timestamp()`代替. (2认同)

Dan*_*den 137

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

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

  • @JesseDhillon它回答了这个问题(将来的UNIX时间戳为5分钟),而不是标题. (22认同)
  • 这不回答这个问题. (12认同)
  • `time.time()`可以回退.要在将来5分钟创建"Expires"值,您可能需要[`time.monotonic()`](http://docs.python.org/dev/library/time.html#time.monotonic)模拟取决于你的用例. (3认同)

Ali*_*Ali 57

这就是你需要的:

import time
import datetime
n = datetime.datetime.now()
unix_time = time.mktime(n.timetuple())
Run Code Online (Sandbox Code Playgroud)

  • EG这是"Python日期时间到Unix时间戳"问题的答案,而Cat Plus Plus回答了"Python日期时间将在5分钟到Unix时间戳"的问题.所以这个很干净而且显而易见. (3认同)

mip*_*adi 47

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

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

  • 这是一种有点无证的行为(http://www.python.org/doc/current/library/datetime.html).似乎是在linux下工作而不是在win32下工作(生成`ValueError:无效的格式字符串`). (32认同)
  • 此方法不适用于时区.更改时区将给出相同的结果日期时间(2013,12,7,tzinfo =时区("美国/芝加哥")).strftime("%s")1386385200 datetime(2013,12,7,tzinfo = timezone("Europe /里加")).strftime("%s")1386385200 (3认同)

jfs*_*jfs 11

这是一个不太破碎datetime的解决方案,可以从datetime对象转换为posix时间戳:

future = datetime.datetime.utcnow() + datetime.timedelta(minutes=5)
return (future - datetime.datetime(1970, 1, 1)).total_seconds()
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅在Python中将datetime.date转换为UTC时间戳.


Sra*_*van 6

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