簡體   English   中英

在 Python 中將時間戳舍入到最近的一天

[英]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 版本 ;),我會考慮使用適當的舍入函數。 您可以選擇floorroundceil ... 例如:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM