ylabel - python title position




如何截斷Python中DateTime對象的時間? (7)

什麼是截斷python datetime對象的優雅方式?

在這個特殊的情況下,直到今天。 所以基本上將小時,分鐘,秒和微秒設置為0。

我想輸出也是一個日期時間對象,而不是一個字符串。


四年後:另一種方式,避免replace

我知道四年前公認的答案,但這似乎比使用replace更輕:

dt = datetime.date.today()
dt = datetime.datetime(dt.year, dt.month, dt.day)

筆記

  • 當您創建datetime時間對象而不將時間屬性傳遞給構造函數時,您將獲得午夜。
  • 正如其他人所指出的,這假定你想要一個日期時間對象,以便以後用於timedeltas。
  • 當然,您可以將其替換為第一行: dt = datetime.datetime.now()

6年後...我發現這篇文章,我更喜歡numpy aproach:

import numpy as np
dates_array = np.array(['2013-01-01', '2013-01-15', '2013-01-30']).astype('datetime64[ns]')
truncated_dates = dates_array.astype('datetime64[D]')

乾杯


您不能截斷日期時間對象,因為它是不可變的

但是,下面是一種使用0小時,分鐘,秒和微秒字段構造新日期時間的方法,不會丟棄原始日期或tzinfo:

newdatetime = now.replace(hour=0, minute=0, second=0, microsecond=0)

您可以使用datetime.strftime來提取日期,月份,年份......

示例:

from datetime import datetime
d = datetime.today()

# Retrieves the day and the year
print d.strftime("%d-%Y")

輸出(今天):

29-2011

如果您只想檢索一天,則可以使用日期屬性,如:

from datetime import datetime
d = datetime.today()

# Retrieves the day
print d.day

輸出(今天):

29


有一個偉大的圖書館用來操縱日期: Delorean

import datetime
from delorean import Delorean
now = datetime.datetime.now()
d = Delorean(now, timezone='US/Pacific)

>>> now    
datetime.datetime(2015, 3, 26, 19, 46, 40, 525703)

>>> d.truncate('second')
Delorean(datetime=2015-03-26 19:46:40-07:00, timezone=US/Pacific)

>>> d.truncate('minute')
Delorean(datetime=2015-03-26 19:46:00-07:00, timezone=US/Pacific)

>>> d.truncate('hour')
Delorean(datetime=2015-03-26 19:00:00-07:00, timezone=US/Pacific)

>>> d.truncate('day')
Delorean(datetime=2015-03-26 00:00:00-07:00, timezone=US/Pacific)

>>> d.truncate('month')
Delorean(datetime=2015-03-01 00:00:00-07:00, timezone=US/Pacific)

>>> d.truncate('year')
Delorean(datetime=2015-01-01 00:00:00-07:00, timezone=US/Pacific)

如果你想獲得日期時間值:

>>> d.truncate('year').datetime
datetime.datetime(2015, 1, 1, 0, 0, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>)

要獲得對應給定日期時間對象的午夜,可以使用datetime.combine()方法

>>> from datetime import datetime, time
>>> dt = datetime.utcnow()
>>> dt.date()
datetime.date(2015, 2, 3)
>>> datetime.combine(dt, time.min)
datetime.datetime(2015, 2, 3, 0, 0)

.replace()方法相比,其優點是即使datetime模塊引入了納秒支持,基於datetime.combine()的解決方案也將繼續工作。

如果需要可以保留tzinfo但是utc偏移可能在午夜不同,例如由於DST轉換,因此一個天真的解決方案(設置tzinfo時間屬性)可能會失敗。 請參閱如何獲得給定時區的“午夜”的UTC時間?





datetime