[英]Round timestamp to nearest day in Python
在 Python 2.7.2 中,我得到了自紀元以來的秒數:
sec_since_epoch = (date_obj - datetime(1970, 1, 1, 0, 0)).total_seconds()
現在我想將這些秒數四舍五入到最近的一天,例如:
datetime.fromtimestamp(sec_since_epoch)
對應於datetime(2013, 12, 14, 5, 0, 0)
我希望新的時間戳對應於datetime(2013, 12, 14, 0, 0, 0)
我知道這樣做的丑陋方式,但有沒有優雅的方式?
您可以使用datetime.timetuple()
來操作日期。 例如以這種方式:
from datetime import datetime
dt = datetime(2013, 12, 14, 5, 0, 0)
dt = datetime(*dt.timetuple()[:3]) # 2013-12-14 00:00:00
print dt.strftime('%s') # 1386997200
當然,只需先將datetime
時間轉換為date
:
sec_since_epoch = (date_obj.date() - date(1970, 1, 1)).total_seconds()
當然date()
會截斷。 如果要在中午或中午之后四舍五入等,只需在截斷前添加 12 小時,或檢查日期是否 >= 同一天中午,如果是,則添加一天(請注意,這些可以在DST 邊界天數),或任何您想要四舍五入的規則。
這是一種非常直觀的方法,它可能看起來有點野蠻,但它可以在一條線上工作。
基本上,邏輯是獲取您當前的日期,然后減去您擁有的所有小時、分鍾、秒和微秒,然后添加一天(如果您想四舍五入,則保留它,否則如果您要四舍五入,則保留它。)
from datetime import date,timedelta
Rounded_date = ( the_date - timedelta(hours=date.hour, minutes=date.minute,
seconds=date.second, microseconds=date.microsecond) ) + timedelta(days=1)
對於現代 Pandas 版本 ;),我會考慮使用適當的舍入函數。 您可以選擇floor 、 round和ceil ... 例如:
t_max_overall=pd.Timestamp('2022-05-05 10:03:33.086966+0000', tz='UTC')
然后:
t_max_overall.floor('1d')
返回: Timestamp('2022-05-05 00:00:00+0000', tz='UTC')
盡管:
t_max_overall.round('1d')
返回Timestamp('2022-05-05 00:00:00+0000', tz='UTC')
,
和:
t_max_overall.ceil('1d'))
返回: Timestamp('2022-05-06 00:00:00+0000', tz='UTC')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.