代码之家  ›  专栏  ›  技术社区  ›  Magnus Jensen

Unix时间戳+1小时替换

  •  0
  • Magnus Jensen  · 技术社区  · 2 年前

    我在Python中定义了两个辅助方法来设置开始时间和结束时间,并希望将其转换为unix时间戳(epoch):

    def set_epoch_start():
        unix_epoch = datetime.utcfromtimestamp(0).replace(tzinfo=timezone.utc)
        now = datetime.now(tz=timezone.utc)
        new_time = now.replace(hour=17, minute=0, second=0, microsecond=0)
        seconds = (new_time - unix_epoch).total_seconds()
        return int(seconds)
    
    
    def set_epoch_end():
        unix_epoch = datetime.utcfromtimestamp(0).replace(tzinfo=timezone.utc)
        now = datetime.now(tz=timezone.utc)
        new_time = now.replace(hour=23, minute=0, second=0, microsecond=0)
        seconds = (new_time - unix_epoch).total_seconds()
        return int(seconds)
    

    到目前为止,我已经硬编码了小时的值(17和23),但我希望开始时间的替换方法加+1小时,结束时间的替换法加2小时。

    在寻求帮助时,我遇到了timedelta,即timedelta(小时=2),但我如何将timedelta添加到上面的两个函数中呢?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Allan Wind    2 年前

    首先重构代码以消除(这两个函数非常相似)。然后你需要进去 now 为了有一个稳定的参考:

    from datetime import *
    
    def epoch_offset(now, delta):
        unix_epoch = datetime.utcfromtimestamp(0).replace(tzinfo=timezone.utc)
        return int((now + delta - unix_epoch).total_seconds())
    
    now = datetime.now(timezone.utc)
    for offset in (1,2):
        print(epoch_offset(now, timedelta(hours=offset)))
    

    示例输出:

    1724306428
    1724302828
    

    与其进行纪元计算,不如考虑只使用 timestamp() 方法:

    def epoch_offset(now, delta):
            return int((now + delta).timestamp())