在Python中,如何获取前一天的Unix时间戳?

在Python中,如何获取前一天的Unix时间戳?,python,datetime,time,Python,Datetime,Time,我在太平洋标准时间。我想得到2个时间戳: 昨天的开始 昨天的结束 无论当前是什么时间,这些时间戳都应该是相同的 如何使用Python实现这一点 我是否必须使用datetime对象,然后将其转换为timestamp?实现这一点的明显方法是使用datetime。但你显然是出于某种奇怪的原因想避免这样。您可以使用时间或日历,或各种第三方库,或自定义代码 这里有时间: import time def yesterday(): now = time.time() yesterday =

我在太平洋标准时间。我想得到2个时间戳:

  • 昨天的开始
  • 昨天的结束
  • 无论当前是什么时间,这些时间戳都应该是相同的

    如何使用Python实现这一点


    我是否必须使用
    datetime
    对象,然后将其转换为timestamp?

    实现这一点的明显方法是使用
    datetime
    。但你显然是出于某种奇怪的原因想避免这样。您可以使用
    时间
    日历
    ,或各种第三方库,或自定义代码

    这里有
    时间

    import time
    
    def yesterday():
        now = time.time()
        yesterday = time.localtime(now - 86400) # seconds/day
        start = time.struct_time((yesterday.tm_year, yesterday.tm_mon, yesterday.tm_mday,
                                  0, 0, 0, 0, 0 yesterday.tm_isdst))
        today = time.localtime(now)
        end = time.struct_time((today.tm_year, today.tm_mon, today.tm_mday,
                                0, 0, 0, 0, 0 today.tm_isdst))
        return time.mktime(start), time.mktime(end)
    
    如果您在闰秒期间运行此程序,在跟踪闰秒的平台上,它将给出今天而不是昨天。你可以很容易地检查(基本上,如果今天==昨天,减去另一天),但我认为这不值得


    此外,如果您在DST交叉时在一个时区运行此操作,该时区的交叉发生在午夜和01:00或23:00之间(取决于您的半球),那么它将得到错误的一天。例如,在中,如果您在2013年2月16日的第二个23:00-00:00小时运行此代码,它将返回一天的开始,其中包括24小时前的时间…即今天,而不是昨天。同样的解决方法也适用于这里。

    要获得
    昨天的信息
    我想您可以这样做:

    >>>import datetime
    >>>yesterday = datetime.date.today() - datetime.timedelta(1)
    >>>unix_time= yesterday.strftime("%s") #Second as a decimal number [00,61] (or Unix Timestamp)
    >>>print unix_time
    '1372737600'
    

    你不必使用
    datetime
    对象,但是……为什么你不想使用呢?你说的“昨天的开始”是什么意思?如果时间戳用于两个不同的时间点,那么时间戳怎么可能相同?你说的“昨天的结束”是指“今天的开始”?或者你的意思是午夜前一(秒?/毫秒?/纳秒?)@MattJohnson:他是说在任何给定时间返回的时间戳对应该与在同一天的任何其他时间返回的时间戳对相同。彼此不一样。是的,正如您所描述的,有些时区会发生转换。例如,.@MattJohnson:看起来你是对的;在巴西,在2月16日的第二个23:00-00:00期间,该代码将在今天而不是昨天返回(假设
    正确工作)。让我编辑一下答案。谢谢。1)用一个论点:秒,而不是年、月、日。2) 如果您声明唯一正确的答案是半开放范围,这包括今天第一个时刻的“结束”值。这对于
    start
    是正确的,但是对于使用
    end
    和昨天的命名元组可能要使用的任何逻辑都是不正确的,例如
    end.tm_mon end.tm_day
    等3)OP没有明确表示他不想使用datetime 4)您的逻辑将在
    time.time()返回的秒数的小数点处失效。
    @thewolf:1)对不起,这应该是
    struct_time
    ;固定的。2) 不,半开范围是
    start@thewolf:另外,请注意没有人使用
    end
    ;他明确地想要一个时间戳,它只是一个数字,所以这就是我要返回的。一对时间戳必须解释为半开放范围;唯一的另一种选择是将以前的实数返回到今天的午夜,根据定义,没有“以前的实数”这样的东西。它给出了unix_time=beday.strftime(“%s”)的错误,以及unix_time=beday.strftime(“%s”)的错误