1. 程式人生 > >python的datetime模組

python的datetime模組

一 Python 中 日期型別 與字串互轉的問題

  • 1  字串  轉成 datetime 型別
  • 2  datetime 型別 轉成 字串

二  日期相加減的問題

三 datetime模組

1.datetime中的常量

  • datetime.MINYEAR,表示datetime所能表示的最小年份,MINYEAR = 1。
  • datetime.MAXYEAR,表示datetime所能表示的最大年份,MAXYEAR = 9999。

2.datetime中的類

  • datetime.date:表示日期的類。常用的屬性有year, month, day;
  • datetime.time:表示時間的類。常用的屬性有hour, minute, second, microsecond;
  • datetime.datetime:表示日期時間。
  • datetime.timedelta:表示時間間隔,即兩個時間點之間的長度。
  • datetime.tzinfo:與時區有關的相關資訊。

3.date類 
date類表示一個由年、月、日組成的日期。 


①類方法與類屬性 
date類定義了一些常用的類方法與類屬性,方便我們操作:

  • date.max、date.min:date物件所能表示的最大、最小日期;
  • date.resolution:date物件表示日期的最小單位。這裡是天。
  • date.today():返回一個表示當前本地日期的date物件;
  • date.fromtimestamp(timestamp):根據給定的時間戮,返回一個date物件;
  • datetime.fromordinal(ordinal):將Gregorian日曆時間轉換為date物件;(Gregorian Calendar :一種日曆表示方法,類似於我國的農曆,西方國家使用比較多,此處不詳細展開討論。)

②例項方法和屬性 
date提供的例項方法和屬性:

  • date.year、date.month、date.day:年、月、日;
  • date.replace(year, month,day):生成一個新的日期物件,用引數指定的年,月,日代替原有物件中的屬性。(原有物件仍保持不變)
  • date.timetuple():返回日期對應的time.struct_time物件;
  • date.toordinal():返回日期對應的Gregorian Calendar日期;
  • date.weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此類推;
  • data.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此類推;
  • date.isocalendar():返回格式如(year,month,day)的元組;
  • date.isoformat():返回格式如’YYYY-MM-DD’的字串;
  • date.strftime(fmt):自定義格式化字串。在下面詳細講解。

③date支援的其他操作

  • date2 = date1 + timedelta #日期加上一個間隔,返回一個新的日期物件)
  • date2 = date1 - timedelta #日期隔去間隔,返回一個新的日期物件
  • timedelta = date1 - date2 #兩個日期相減,返回一個時間間隔物件
  • date1 < date2 #兩個日期進行比較

4.Time類 
time類表示時間,由時、分、秒以及微秒組成。 
①time類定義的類屬性

  • time.min、time.max:time類所能表示的最小、最大時間。其中,time.min = time(0, 0, 0, 0),time.max = time(23, 59, 59, 999999);
  • time.resolution:時間的最小單位,這裡是1微秒;

②time類提供的例項方法和屬性

  • time.hour、time.minute、time.second、time.microsecond:時、分、秒、微秒;
  • time.tzinfo:時區資訊;
  • time.replace([ hour[ , minute[ , second[ ,microsecond[ , tzinfo] ] ] ] ] ):建立一個新的時間物件,用引數指定的時、分、秒、微秒代替原有物件中的屬性(原有物件仍保持不變);
  • time.isoformat():返回型如”HH:MM:SS”格式的字串表示;
  • time.strftime(fmt):返回自定義格式化字串。在下面詳細介紹;

像date一樣,也可以對兩個time物件進行比較,或者相減返回一個時間間隔物件。

5.datetime類 
datetime是date與time的結合體,包括date與time的所有資訊。 
①datetime類定義的類屬性與方法

  • datetime.min、datetime.max:datetime所能表示的最小值與最大值;
  • datetime.resolution:datetime最小單位;
  • datetime.today():返回一個表示當前本地時間的datetime物件;
  • datetime.now([tz]):返回一個表示當前本地時間的datetime物件,如果提供了引數tz,則獲取tz引數所指時區的本地時間;
  • datetime.utcnow():返回一個當前utc時間的datetime物件;
  • datetime.fromtimestamp(timestamp[,tz]):根據時間戮建立一個datetime物件,引數tz指定時區資訊;
  • datetime.utcfromtimestamp(timestamp):根據時間戮建立一個datetime物件;
  • datetime.combine(date, time):根據date和time,建立一個datetime物件;
  • datetime.strptime(date_string, format):將格式字串轉換為datetime物件;

②datetime類提供的例項方法與屬性

  • datetime.year、month、day、hour、minute、second、microsecond、tzinfo:年、月、日、時、分、秒、毫秒、時區;
  • datetime.date():獲取date物件。
  • datetime.time():獲取time物件。
  • datetime. replace([ year[ , month[ , day[ , hour[ , minute[ , second[ , microsecond[ ,tzinfo] ] ] ] ] ] ] ]): 返回一個替換了指定日期時間欄位的新datetime物件。
  • datetime.timetuple ():返回一個時間元素, 等價於time.localtime()。
  • datetime. utctimetuple():返回UTC時間元組物件, 等價於time.localtime()。
  • datetime. toordinal ():返回日期對應的Gregorian Calendar 日期。
  • datetime. weekday ():返回 0 ~ 6 表示星期幾(星期一是0,依此類推)。
  • datetime. isocalendar ():返回一個三元組格式 (year, month, day)。
  • datetime. isoformat ([ sep] ):返回一個 ISO 8601 格式的日期字串,如 “YYYY-MM-DD”的字串。
  • datetime. ctime():返回一個日期時間的C格式字串,等效於time.ctime(time.mktime(dt.timetuple()));
  • datetime. strftime (format):返回自定義格式化字串表示日期。

像date一樣,也可以對兩個datetime物件進行比較,或者相減返回一個時間間隔物件,或者日期時間加上一個間隔返回一個新的日期時間物件。 
6.timedelta與tzinfo類 
①timedelta類 
datetime.timedelta物件代表兩個時間之間的的時間差,兩個date或datetime物件相減時可以返回一個timedelta物件。 
timedelta包含資料days、seconds、microseconds,表示天數、秒數、微秒數,包含方法total_seconds() ,表示時間間隔的總秒數。 
②tzinfo類 
tzinfo:與時區有關的相關資訊。

一些具體案例情況

"""
時間模組的demo
這裡主要介紹了
1.字串 轉成 datetime 型別
2.datetime 型別 轉成 字串
"""

# 字串  轉成 datetime 型別
"""
def strptime(cls, date_string, format):pass 這個函式 需要傳入兩個引數 date_string 即日期字串, format 即日期的格式
"""
import datetime
datestr1 = '2017-03-28'
datestr2 = '2017-03-31'
date1 = datetime.datetime.strptime(datestr1, '%Y-%m-%d')
date2 = datetime.datetime.strptime(datestr2, '%Y-%m-%d')
diff_days = (date2 - date1)
diff_days = (date2 - date1).days
print(diff_days)
print(date1.year)
print(type(datestr1))
print('---------------------------------------------')

結果如下:
3
2017
<class 'str'>
---------------------------------------------

"""
def strftime(self, fmt: Union[str, unicode]) -> str: ...
"""
# datetime 型別 轉成 字串
import datetime
date_0 = datetime.datetime.now()
datestr = date_0.strftime('%Y-%m-%d')
datestr2 = str(date_0)
dt, _ = datestr2.split('.')
print(date_0)
print(datestr)
print(datestr2)
print(dt)
print(type(date_0))
print('---------------------------------------------')
結果如下:
2018-07-17 13:12:26.216551
2018-07-17
2018-07-17 13:12:26.216551
2018-07-17 13:12:26
<class 'datetime.datetime'>
---------------------------------------------

"""
日期相加減的問題
在datetime模組,有一個類 timedelta 來進行日期的相加減操作 
delta:希臘語字母表第四字母δ,[數]變數增量
"""

from  datetime import datetime,date,time,timedelta
dt = datetime(2018, 3, 1, 19, 40, 30)
dt = datetime(2018, 3, 1, 19, 40, 30, 356102)
print(dt,type(dt))
結果如下:
2018-03-01 19:40:30.356102 <class 'datetime.datetime'>

#1. 一個日期 向前或向後推遲幾天
dt2 = dt+timedelta(days=5)
print(dt2)
#1. 一個日期 向前或向後推遲幾小時
now = datetime.now()
print(now)
hours = timedelta(hours=3)
next = now+hours
print(next)
結果如下:
2018-03-06 19:40:30.356102
2018-07-17 13:12:26.216551
2018-07-17 16:12:26.216551

#3  同理 還可以支援  seconds , milliseconds,minutes,weeks 分別是 秒 ,毫秒, 分鐘, 周...

def __new__(cls, days=None, seconds=None, microseconds=None, milliseconds=None, minutes=None,
            hours=None, weeks=None): # known case of datetime.timedelta.__new__)
   pass

 參考完檔: