Python 日期和時間 —— datetime


Python 日期和時間 —— datetime

 

  Python提供了多個內置模塊用於操作日期時間,如calendar,time,datetime。calendar用於處理日歷相關 ;time提供的接口與C標准庫time.h基本一致;而其中應用最廣的即datetime,相比於time模塊,datetime模塊的接口則更直觀、更容易調用。本文將會對datetime進行學習。

  datetime 模塊為日期和時間處理提供了多種方法。支持方法的同時,還可格式化輸出。此外,該模塊還支持時區的處理。

 

  datetime 庫

   

    可見包含四大類,date表示日期(年月日);datetime(年月日時分秒...)繼承 date;time表示時間(時分秒...);timedelta 表示時間差;tzinfo 表示時區信息(本章暫不做介紹)。

 

  datetime.date

    date 即日期,類的構成為 (年, 月,日),對應的 year、month、day 均為date類的屬性(type 為 int)。

year的范圍是[MINYEAR, MAXYEAR],即[1, 9999];
month的范圍是[1, 12]。(月份是從1開始的,不是從0開始的);
day的最大值根據給定的year, month參數來決定。例如閏年2月份有29天,非閏年28天; 若超范圍,會報錯 

    today() 返回當日;weekday() 返回當前星期數,若星期一,返回0、若星期2,返回1,以此類推;isoweekday()  若星期一,返回1、若星期2,返回2,以此類推;

    isoformat() 返回日期以ISO格式,即 'YYYY-MM-DD’的字符串;strftime(...) 方法可自定義日期表示法(time和datetime也均可使用),該方法會在博文之后詳細說明。

    date.replace(year/month/day):生成一個新的日期對象,用參數指定的年,月,日代替原有對象中的屬性。(原有對象仍保持不變)

    一些其他的方法請參考文檔,上述方法示例代碼如下:

    

 

  datetime.time

time 即時間,類的構成為 (時, 分, 秒, 微秒, 時區 信息),微妙、時區信息可缺省。

     time類提供的實例方法和屬性:time.hour、time.minute、time.second、time.microsecond:時、分、秒、微秒; time.tzinfo:時區信息(暫不介紹);

     其中 time.min = time(0, 0, 0, 0), time.max = time(23, 59, 59, 999999);time.resolution:時間的最小單位,這里是1微秒;

     isoformat() 返回時間以ISO格式,即 "HH:MM:SS" 的字符串;strftime(...) 方法也可自定義時間表示法,該方法會在博文之后詳細說明。

     time.replace([ hour[ , minute[ , second[ , microsecond[ , tzinfo] )生成一個新的時間對象,用參數指定的時、分、秒、微秒代替原有對象中的屬性(原有對象仍保持不變);

     一些其他的方法請參考文檔,上述方法示例代碼 如下:

     

 

  datetime.datetime

    datetime是date與time的結合體,包括date與time的所有信息(常用的時間處理就用datetime)。

    它的構造函數如下:datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ),各參數的含義與date、time的構造函數中的一樣,要注意參數值的范圍。

    datetime類定義的類屬性與方法:

      datetime.today():返回一個表示當前本地時間的datetime對象;
      datetime.now([tz]):返回一個表示當前本地時間的datetime對象,如果提供了參數tz,則獲取tz參數所指時區的本地時間;
      datetime.utcnow():返回一個當前utc時間的datetime對象;
      datetime.fromtimestamp(timestamp[, tz]):根據時間戮創建一個datetime對象,參數tz指定時區信息;
      datetime.date():獲取date對象; datetime.time():獲取time對象;
      datetime. replace ([ year[ , month[ , day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ] ] ]) : 用法同date和time方法;
      datetime.combine(date, time):根據date和time,創建一個datetime對象;
      datetime.strptime(date_string, format):將格式字符串轉換為datetime對象;同樣該方法會在博文之后詳細說明。

time 模塊本文不介紹,但需要了解一個比較重要的概念,即時間戳 

  time() -> floating point number
 
  Return the current time in seconds since the Epoch.
  Fractions of a second may be present if the system clock provides them.

Unix time, POSIX time 或 Unix timestamp 是從Epoch(1970年1月1日00:00:00 UTC)開始所經過的秒數,不考慮閏秒。相關的詳細了解請 Google。

import time
timestamp = time.time()
print timestamp

 

     上述 datetime 的方法示例如下:

     

 

  datetime.timedelta

    即表示一個時間的差值: 

具體參考文檔,這邊就不多加闡述了:

timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

    All arguments are optional and default to 0. Arguments may be ints, longs, or floats, and may be positive or negative.


    Only days, seconds and microseconds are stored internally. Arguments are converted to those units:

  •         A millisecond is converted to 1000 microseconds.
  •         A minute is converted to 60 seconds.
  •         An hour is converted to 3600 seconds.
  •         A week is converted to 7 days.

    and days, seconds and microseconds are then normalized so that the representation is unique, with

  •         0 <= microseconds < 1000000
  •         0 <= seconds < 3600*24 (the number of seconds in one day)
  •         -999999999 <= days <= 999999999

    主要是對date、time、datetime 一些 timedelta 操作的支持,如下:

      date 對某些操作進行了重載,它允許我們對日期進行如下一些操作:
        date2 = date1 + timedelta  # 日期加上一個間隔,返回一個新的日期對象(timedelta將在下面介紹,表示時間間隔)
        date2 = date1 - timedelta   # 日期隔去間隔,返回一個新的日期對象
        timedelta = date1 - date2   # 兩個日期相減,返回一個時間間隔對象
        date1 < date2         # 兩個日期可進行比較

      注: 對日期進行操作時,要防止日期超出它所能表示的范圍。

      time 和 datetime 的操作與 date 雷同,這里就不提供例子了。

     

  時間的格式化

     datetime、date、time 都提供了strftime()方法,該方法接收一個格式字符串,輸出日期時間的字符串表示。

參考示例如下:

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM