代码之家  ›  专栏  ›  技术社区  ›  Daniel Rhoden

python在未来5分钟内创建unix时间戳

  •  295
  • Daniel Rhoden  · 技术社区  · 15 年前

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

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

    11 回复  |  直到 11 年前
        1
  •  347
  •   Sekhat    11 年前

    另一种方法是 calendar.timegm :

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

    它也比 %s 标记为 strftime (在窗户上不起作用)。

        2
  •  153
  •   Tim Tisdall    11 年前

    现在在python中,=3.3 你可以打电话给 timestamp() method 以浮点形式获取时间戳。

    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
    
        3
  •  137
  •   Daniel Rhoden    15 年前

    刚刚找到这个,而且更短。

    import time
    def expires():
        '''return a UNIX style timestamp representing 5 minutes from now'''
        return int(time.time()+300)
    
        4
  •  57
  •   Ali    12 年前

    这就是你需要的:

    import time
    import datetime
    n = datetime.datetime.now()
    unix_time = time.mktime(n.timetuple())
    
        5
  •  47
  •   mipadi    15 年前

    你可以用 datetime.strftime 要以纪元形式获取时间,请使用 %s 格式字符串:

    def expires():
        future = datetime.datetime.now() + datetime.timedelta(seconds=5*60)
        return int(future.strftime("%s"))
    
        6
  •  11
  •   Community CDub    8 年前

    这里有一个不那么破碎的 datetime -从datetime对象转换为posix时间戳的基于解决方案:

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

    有关详细信息,请访问 Converting datetime.date to UTC timestamp in Python .

        7
  •  6
  •   rgrinberg    12 年前
    def in_unix(input):
      start = datetime.datetime(year=1970,month=1,day=1)
      diff = input - start
      return diff.total_seconds()
    
        8
  •  4
  •   fawce    13 年前

    关键是要确保在开始转换之前使用的所有日期都在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
    
        9
  •  4
  •   andrew cooke    12 年前

    以下是基于上述答案(加上毫秒修正)并模拟 datetime.timestamp() 对于使用时区时3.3之前的python 3。

    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
    

    它为我的日期时间处理更多的格式/类型。

        10
  •  1
  •   hd1 Madan Sapkota    12 年前
    def expiration_time():
        import datetime,calendar
        timestamp = calendar.timegm(datetime.datetime.now().timetuple())
        returnValue = datetime.timedelta(minutes=5).total_seconds() + timestamp
        return returnValue
    
        11
  •  1
  •   mighq    11 年前

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