我在PST时区。 我想获取2个时间戳:
- 昨天的开始时间
- 昨天的结束时间
这些时间戳应该与当前时间无关。
如何使用Python做到这一点?
我需要使用 datetime
对象,然后将其转换为时间戳吗?
要获取昨天
,我猜你可以这样做:
>>>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
。但显然你出于某种奇怪的原因不想使用它。那么,你可以使用 time
或 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)
is_dst
正常工作)。让我编辑答案。谢谢。 - abarnertstart < time_yesterday < end
是正确的,但对于任何想要使用 end
和昨天的命名元组(如 end.tm_mon end.tm_day
等)的逻辑都是不正确的。 3) OP 没有明确表示他不想使用 datetime。 4) 你的逻辑将会因为 time.time()
返回的秒的小数部分而出错。struct_time
;已修复。2)不,半开区间是start <= time < end
,而不是start < time
。3)OP说:“我必须使用DateTime对象吗?”这意味着他不想使用它。但是,以防我推断错误,第一句话是“显然的方法是使用datetime
。”4)如果您指的是微秒部分,那么不,它不会有任何影响;HH:MM:SS.999999始终在与HH:MM:SS.000000相同的日期。如果您的意思是time.time()
不会立即运行...那又怎样? - abarnertend
;他明确想要一个时间戳,这只是一个数字,所以我正在返回它。一对时间戳必须被解释为半开区间;唯一的其他选择是返回今天午夜之前的上一个实数,但根据定义不存在“上一个实数”。 - abarnert
datetime
对象,但是为什么不想使用呢? - abarnert