Python在未来五分钟内创建unix时间戳记

问题描述 投票:296回答:11

我必须在未来5分钟内创建一个“ Expires”值,但是我必须以UNIX Timestamp格式提供它。到目前为止,我已经拥有了,但是好像很hack。

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

是否有为我执行时间戳转换的模块或功能?

python datetime unix-timestamp
11个回答
347
投票

另一种方法是使用calendar.timegm

calendar.timegm

future = datetime.datetime.utcnow() + datetime.timedelta(minutes=5) return calendar.timegm(future.timetuple()) 标志到%s的移植性更强(在Windows上不起作用。


1
投票
SimpleDate(my_datetime).timestamp + 5 * 60

1
投票

[请注意,带有def expiration_time(): import datetime,calendar timestamp = calendar.timegm(datetime.datetime.now().timetuple()) returnValue = datetime.timedelta(minutes=5).total_seconds() + timestamp return returnValue 的解决方案适用于python-2.7 +。将timedelta.total_seconds()用于较低版本的Python。


154
投票

Now in Python> = 3.3您只需调用strftime即可将时间戳记作为浮点数。

timestamp() method

137
投票

刚刚发现了它,并且它更短了。

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

57
投票

这是您需要的:

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

47
投票

您可以使用import time import datetime n = datetime.datetime.now() unix_time = time.mktime(n.timetuple()) 使用datetime.strftime格式的字符串以Epoch格式获取时间:

%s

注意:这仅在linux下有效,并且该方法不适用于时区。


11
投票

这是一个基于def expires(): future = datetime.datetime.now() + datetime.timedelta(seconds=5*60) return int(future.strftime("%s")) 的较不完整的解决方案,可以将datetime对象转换为posix时间戳:

datetime

future = datetime.datetime.utcnow() + datetime.timedelta(minutes=5) return (future - datetime.datetime(1970, 1, 1)).total_seconds() 上查看更多详细信息。



4
投票

关键是在开始转换之前,确保您使用的所有日期都在utc时区中。请参阅def in_unix(input): start = datetime.datetime(year=1970,month=1,day=1) diff = input - start return diff.total_seconds() 了解如何正确执行此操作。通过对utc进行标准化,可以消除夏令时转换的歧义。然后,您可以安全地使用timedelta来计算距Unix纪元的距离,然后将其转换为秒或毫秒。

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

还请注意,这仅适用于1970年之后的日期。

http://pytz.sourceforge.net/

4
投票

以下内容基于上述答案(加上毫秒的更正),并且在使用时区时在3.3之前模拟了Python 3的 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

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的一部分。但是,如果您使用的是该软件包,则可能输入:

simple-date

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

© www.soinside.com 2019 - 2024. All rights reserved.