11

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

  1. 昨天的开始
  2. 昨天的结束

无论当前是什么时间,这些时间戳都应该是相同的。

我怎样才能用 Python 做到这一点?

我是否必须使用该datetime对象,然后将其转换为时间戳?

4

2 回答 2

21

为了得到yesterday我想你可以这样做:

>>>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'
于 2013-07-04T00:11:39.377 回答
1

显而易见的方法是使用datetime. 但是您显然出于某种奇怪的原因想要避免这种情况。好吧,您可以使用timeor calendar,或各种第三方库,或自定义代码。

这是与time

import time

def yesterday():
    now = time.time()
    yday = time.localtime(now - 86400) # seconds/day
    start = time.struct_time((yday.tm_year, yday.tm_mon, yday.tm_mday, 0, 0, 0, 0, 0, yday.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 小时前的时间的一天的开始时间……这是今天,而不是昨天. 相同的解决方法在这里有效。

于 2013-07-04T00:10:23.793 回答