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

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


当前回答

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

其他回答

注意,使用timedelta.total_seconds()的解决方案可以在python-2.7+上工作。 对于较低版本的Python,请使用calendar.timegm(future.utctimetuple())。

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

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

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

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

现在,在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

以下是基于上面的答案(加上对毫秒的修正),并在使用时区时模拟Python 3 3.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_timestamp是simple-date的一部分。但如果你正在使用这个包,你可能会输入:

SimpleDate(my_datetime).timestamp + 5 * 60

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