給定一個日期時間對象,我如何將它整理爲下一次出現的8AM PST?如何將日期時間四捨五入到特定時間?
0
A
回答
1
如果結果是一個時區時區感知DateTime對象與非固定UTC偏移,那麼你可以不只是打電話.replace()
或.combine()
- 它可能會創建一個日期時間與錯誤的UTC偏移。該問題類似於How do I get the UTC time of "midnight" for a given timezone?(使用00:00
代替08:00
)。
假設早上8點一直存在,並明確在PST:
from datetime import datetime, time as datetime_time, timedelta
import pytz # $ pip install pytz
def next_8am_in_pst(aware_dt, tz=pytz.timezone('America/Los_Angeles')):
pst_aware_dt = tz.normalize(aware_dt.astimezone(tz)) # convert to PST
naive_dt = round_up_to_8am(pst_aware_dt.replace(tzinfo=None))
return tz.localize(naive_dt, is_dst=None)
def round_up_to_8am(dt):
rounded = datetime.combine(dt, datetime_time(8))
return rounded + timedelta(rounded < dt)
例子:
>>> str(next_8am_in_pst(datetime.now(pytz.utc)))
'2016-02-25 08:00:00-08:00'
+0
謝謝,這適用於夏令時邊界。 – camomilk
0
我做了基於從註釋中的一些想法的答案:
def nextDay(d):
pstTime = d.astimezone(pytz.timezone('US/Pacific'))
pstTime = pstTime.replace(hour=8, minute=0, second=0, microsecond=0)
if pstTime < d:
pstTime += datetime.timedelta(days=1)
return pstTime
+1
它可能會在DST轉換日期前失敗 – jfs
1
只是測試的時間是否是前或後8,然後加了一天,如果它的後面,構建一個新的日期時間。
import datetime
def round_datetime(dt):
t = datetime.time(8)
# If time is after 8am, add a day.
if dt.time() > datetime.time(8):
dt += datetime.timedelta(days=1)
return datetime.datetime.combine(dt, t)
相關問題
- 1. Oracle日期四捨五入的時間
- 2. SQL Server日期時間四捨五入
- 3. 四捨五入時間
- 4. 如何將日期時間四捨五入爲最接近的時間段
- 5. 如何四捨五入熊貓日期時間索引?
- 6. 舍入日期時間到四分鐘
- 7. 我如何將MySQL TIME四捨五入到最近的小時(不是日期時間/時間戳)
- 8. 四捨五入MySQL的日期爲2天時間
- 9. Oracle日期四捨五入
- 10. 四捨五入日期
- 11. 如何將時間四捨五入到最近的四分之一和半小時的時間間隔?
- 12. PHP - 如何四捨五入日期
- 13. 將時間值四捨五入到oracle的午夜之前sql
- 14. 如何將Unix時間戳四捨五入到最近的半小時?
- 15. DotNet四捨五入倒數日期時間到最後15分鐘
- 16. 同時轉換時間戳到日期,其四捨五入到最接近的日期在teradata
- 17. 舍入時間日期值
- 18. 如何四捨五入一個SQL時間變量?
- 19. 如何舍入日期時間值
- 20. 如何將時間戳列四捨五入到大熊貓的最高分鐘
- 21. 如何將(總是)時間四捨五入到最近的十位?
- 22. 如何將時間四捨五入到最接近的15分鐘段
- 23. 時間四捨五入到最接近的第10分鐘
- 24. 防止谷歌圖表X四捨五入日期時間列的軸線
- 25. 四捨五入時間最近的每小時季度的PostgreSQL
- 26. 如何將日期時間插入到MySQL日期時間?
- 27. python - 我怎樣才能將日期時間對象四捨五入到最近一個季度的小時?
- 28. DATEDIFF四捨五入截止日期小時SQL Server
- 29. 如何四捨五入
- 30. 如何四捨五入
創建一個新的日期時間,使用從當前日期時間的年,月,日的輸入,並設置小時,分鐘,秒分別爲8,0,0, – Ian
@伊恩:這將永遠是今天的上午8點。要總是四捨五入,除非在上午8點之前,否則你需要在上面再增加一天。 – jsfan
相關:[在Python中舍入到最近30分鐘](http://stackoverflow.com/q/32723150/4279) – jfs