Python 內置模塊之 時間模塊 datetime

概述

datatime模塊重新封裝了time模塊,提供更多接口,datetime庫定義了2個常量和5個類。

2個常量分別是MINYEAR=1和MAXYEAR=9999。

5個類分別是:

  1. date類:表示日期的類
  2. time類:表示時間的類
  3. datetime類:表示時間日期的類
  4. timedelta類:表示兩個datetime對象的差值;
  5. tzinfo類:表示時區的相關信息

datetime的5個類詳解:

1、date類

date類包含三個參數,分別爲year,month,day,返回格式爲year-month-day。

構造函數

__new__(year,month,day):默認的構造函數,創建date類的對象時直接傳入year,month,day三個參數即可返回對應的日期。

fromtimestamp(t):使用時間戳構造對象,使用方法爲:datetime.date.fromtimestamp(t),傳入參數t爲一個時間戳,返回時間戳t對應的日期。

today():使用今天的日期構造對象,使用方法爲:datetime.date.today(),無參數,返回今天的日期。

fromordinal(n):使用日期序數構造對象,使用方法爲:datetime.date.fromordinal(n),傳入參數爲一個整數序數,代表從公元1年1月1日開始的序數,序數每增加1代表增加1天,返回最終計算出的日期。

方法

  1. timetuple():返回日期對應的time.struct_time對象,格式爲time.struct_time(tm_year=1, tm_mon=1, tm_mday=2, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=2, tm_isdst=-1) 。
  2. toordinal():相當於fromordinal(n)的逆過程,返回值即爲fromordinal(n)中的日期序數n。
  3. weekday():返回該日期對應星期幾,用[0,6]代表星期一到星期日。
  4. isoweekday():作用同weekday(),用[1,7]代表星期一到星期日。
  5. isocalendar():返回一個三元組,格式爲(year,week_number,weekday),分別代表年,第幾周,星期幾。
  6. isoformat():返回標準日期格式:YYYY-MM-DD。
  7. ctime():返回格式爲:Sat Sep 8 00:00:00 2018
  8. strftime(format):把日期按照format指定的格式進行格式化,具體的格式化符號如下。
  9. replace(year,month,day):傳入參數爲year,month,day,返回對應的新日期。
%y 兩位數的年份表示(00-99)
%Y 四位數的年份表示(000-9999)
%m 月份(01-12)
%d 月內中的一天(0-31)
%H 24小時制小時數(0-23)
%I 12小時制小時數(01-12)
%M 分鐘數(00=59)
%S 秒(00-59)
%a 本地簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化的月份名稱
%B 本地完整的月份名稱
%c 本地相應的日期表示和時間表示
%j 年內的一天(001-366)
%p 本地A.M.或P.M.的等價符
%U 一年中的星期數(00-53)星期天爲星期的開始
%w 星期(0-6),星期天爲星期的開始
%W 一年中的星期數(00-53)星期一爲星期的開始
%x 本地相應的日期表示
%X 本地相應的時間表示
%Z 當前時區的名稱
%% %號本身

示例

from datetime import *
import time

print('date.max:', date.max)             # date.max: 9999-12-31
print('date.min:', date.min)             # date.min: 0001-01-01
print('date.today():', date.today())     # date.today(): 2016-10-26
print('date.fromtimestamp():', date.fromtimestamp(time.time()))   # date.fromtimestamp(): 2016-10-26

now = date(2016, 10, 26)
tomorrow = now.replace(day = 27)
print('now:', now, ', tomorrow:', tomorrow)   # now: 2016-10-26 , tomorrow: 2016-10-27
print('timetuple():', now.timetuple())        # timetuple(): time.struct_time(tm_year=2016, tm_mon=10, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=300, tm_isdst=-1) 
print('weekday():', now.weekday())            # weekday(): 2 
print('isoweekday():', now.isoweekday())      # isoweekday(): 3
print('isocalendar():', now.isocalendar())    # isocalendar(): (2016, 43, 3)
print('isoformat():', now.isoformat())        # isoformat(): 2016-10-26
print('strftime():', now.strftime("%Y-%m-%d"))# strftime(): 2016-10-26

2、time類

time類包含六個參數,分別爲hour,minute,second,microsecond,tzinfo,fold,返回格式爲hour:minute:second(.microsecond)。

構造函數

__new__(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, fold=0):默認的構造函數,創建time類的對象時直接傳入相應參數即可返回對應的時間。

方法

  1. isoformat():返回標準時間格式:HH:MM:SS.mmmmmm+zz:zz。
  2. strftime(format):把時間按照format指定的格式進行格式化,具體的格式化符號與date類中介紹的相同。
  3. utcoffset():返回timezone的偏移量。
  4. tzname():返回timezone的名稱。
  5. replace():傳入對應的參數,返回新的時間。

示例

from  datetime import *

tm = time(23, 46, 10)
print('tm:', tm)
print('hour: %d, minute: %d, second: %d, microsecond: %d' % (tm.hour, tm.minute, tm.second, tm.microsecond))
tm1 = tm.replace(hour=20)
print('tm1:', tm1)
print('isoformat():', tm.isoformat())
print('strftime()', tm.strftime("%X"))


# tm: 23:46:10
# hour: 23, minute: 46, second: 10, microsecond: 0
# tm1: 20:46:10
# isoformat(): 23:46:10
# strftime() 23:46:10

3、datetime類

datetime類是date類和time類的合體,包含前兩個類的全部參數。

構造函數

__new__(year, month, day, hour=0, minute=0, second=0,microsecond=0, tzinfo=None, fold=0):默認的構造函數,創建datetime類的對象時直接傳入相應參數即可返回對應的時間日期。

fromtimestamp(t):使用時間戳構造對象,傳入參數t爲一個時間戳,返回時間戳t對應的日期和時間。

utcfromtimestamp(t):使用時間戳構造對象,傳入參數t爲一個時間戳,返回時間戳t對應的UTC(時間標準時間)日期和時間。

now():使用當前日期和時間構造對象,無參數,返回當前的日期和時間。

utcnow():使用當前日期和時間構造對象,無參數,返回當前的UTC(時間標準時間)日期和時間。

combine(date,time):使用date和time構造對象,傳入參數爲1個date對象和1個time對象,返回計算出的日期。

方法

  1. timetuple():返回日期時間對應的time.struct_time對象,格式爲time.struct_time(tm_year=1973, tm_mon=11, tm_mday=29, tm_hour=21, tm_min=33, tm_sec=9, tm_wday=3, tm_yday=333, tm_isdst=-1) 。
  2. utctimetuple():與timetuple()相似,返回日期時間對應的UTC(時間標準時間)time.struct_time對象。
  3. astimezone():返回的格式中加入時區信息,格式爲:1973-11-29 21:33:09+08:00。
  4. date():返回date部分
  5. time():返回time部分,tzinfo設置爲None。(另有timetz()方法返回有相同tzinfo的time())
  6. isoformat(sep):返回標準日期時間格式,傳入參數sep可設置日期和時間的分隔符,默認爲'T':1973-11-29T21:33:09。
  7. ctime():返回格式爲:Sat Sep 8 00:00:00 2018
  8. strftime(format):把日期按照format指定的格式進行格式化,具體的格式化符號與date類中介紹的相同。
  9. strptime(date_string,format):將字符串格式轉換爲日期格式,具體的格式化符號與date類中介紹的相同。
  10. replace():傳入對應的參數,返回新的日期時間。

示例

from  datetime import *
import time

print('datetime.max:', datetime.max)
print('datetime.min:', datetime.min)
print('datetime.resolution:', datetime.resolution)
print('today():', datetime.today())
print('now():', datetime.now())
print('utcnow():', datetime.utcnow())
print('fromtimestamp(tmstmp):', datetime.fromtimestamp(time.time()))
print('utcfromtimestamp(tmstmp):', datetime.utcfromtimestamp(time.time()))

# datetime.max: 9999-12-31 23:59:59.999999
# datetime.min: 0001-01-01 00:00:00
# datetime.resolution: 0:00:00.000001
# today(): 2016-10-26 23:12:51.307000
# now(): 2016-10-26 23:12:51.307000
# utcnow(): 2016-10-26 15:12:51.307000
# fromtimestamp(tmstmp): 2016-10-26 23:12:51.307000
# utcfromtimestamp(tmstmp): 2016-10-26 15:12:51.307000

4、timedelta類

timedelta類代表兩個datetime對象之間的時間差。

構造函數

__new__(days=0, seconds=0, microseconds=0,milliseconds=0, minutes=0, hours=0, weeks=0):默認的構造函數,創建timedelta類的對象時直接傳入相應參數即可返回對應單位的時間差。

方法

  1. 支持兩個timedelta對象之間的加、減操作。
  2. 支持對一個timedelta進行取正、取負、取絕對值等操作。
  3. 支持兩個timedelta對象之間的比較。
  4. 支持一個timedelta對象乘以、除以一個整數的操作

示例

# coding:utf-8
from  datetime import *

dt = datetime.now()
dt1 = dt + timedelta(days=-1) # 昨天
dt2 = dt - timedelta(days=1)  # 昨天
dt3 = dt + timedelta(days=1)  # 明天
delta_obj = dt3-dt
print(type(delta_obj),delta_obj)                  # <type 'datetime.timedelta'> 1 day, 0:00:00
print(delta_obj.days ,delta_obj.total_seconds())  # 1 86400.0

5、tzinfo類

tzinfo類是一個虛擬基類,代表時區(time zone),創建子類時必須重寫name(),utcoffset(),dst()這三個方法。

#! /usr/bin/python
# coding=utf-8

from datetime import datetime, tzinfo,timedelta

"""
tzinfo是關於時區信息的類
tzinfo是一個抽象類,所以不能直接被實例化
"""
class UTC(tzinfo):
    """UTC"""
    def __init__(self,offset = 0):
        self._offset = offset

    def utcoffset(self, dt):
        return timedelta(hours=self._offset)

    def tzname(self, dt):
        return "UTC +%s" % self._offset

    def dst(self, dt):
        return timedelta(hours=self._offset)

#北京時間
beijing = datetime(2011,11,11,0,0,0,tzinfo = UTC(8))
print "beijing time:",beijing
#曼谷時間
bangkok = datetime(2011,11,11,0,0,0,tzinfo = UTC(7))
print "bangkok time",bangkok
#北京時間轉成曼谷時間
print "beijing-time to bangkok-time:",beijing.astimezone(UTC(7))

#計算時間差時也會考慮時區的問題
timespan = beijing - bangkok
print "時差:",timespan

#Output==================
# beijing time: 2011-11-11 00:00:00+08:00
# bangkok time 2011-11-11 00:00:00+07:00
# beijing-time to bangkok-time: 2011-11-10 23:00:00+07:00
# 時差: -1 day, 23:00:00

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章