1. 程式人生 > 其它 >Python總結之處理時間(time)、日期時間(datetime)、日曆(calendar)

Python總結之處理時間(time)、日期時間(datetime)、日曆(calendar)

1、 模組匯入

# 日期時間物件,常用方法有date(), time()
>>> from datetime import datetime

# 日期物件,常用屬性有year, month, day
>>> from datetime import date

# 時間物件,常用屬性有hour, minute, second, microsecond, tzinfo(時區)
>>> from datetime import time

# 時間間隔,常用屬性有weeks, days, hours, ...
>>> from datetime import timedelta

# 日期間隔,常用屬性有years, months, weeks, days, hours ... >>> from dateutil import relativedelta 注意:此模組需要匯入(pip install python-dateutil)

2、初始化物件

>>> datetime_obj = datetime.today()
>>> date_obj = date.today()
>>> str_obj = '2020-11-10 15:42:53'
>>> timestamp_obj = '1604994173'

3、格式轉換

# datetime 轉 string (直接使用str強制轉換即可)
>>> str(datetime_obj)            
'2020-11-10 15:42:53.821000'
>>> str(date_obj)
'2020-11-10'

# datetime 格式化成 string
>>> datetime_obj.strftime('%Y-%m-%d %H:%M:%S')
'2020-11-10 15:42:53'
>>> datet_obj.strftime('%Y-%m-%d')
'2020-11-10'

# datetime 轉 date
>>> datetime_obj.date() datetime.date(2012,11,19) # datetime 轉 timestamp >>> datetime_obj.timestamp() 1604994173.821 # 注意:Python時間戳是以秒為單位,java時間戳則以毫秒為單位 # string 轉 datetime >>> datetime.strptime(str_obj,'%Y-%m-%d %H:%M:%S') datetime.datetime(2020, 11, 10, 15, 42, 53) # timestamp 轉 datetime >>> datetime.fromtimestamp(timestamp_obj) datetime.datetime(2020, 11, 10, 15, 42, 53) # date 轉 datetime >>> datetime.strptime(str(date_obj), '%Y-%m-%d') datetime.datetime(2020, 11, 10, 0, 0)

4、型別判斷

>>> isinstance(datetime_obj, date)
True
>>> isinstance(datetime_obj, datetime)
True
>>> isinstance(date_obj, date)
True
>>> isinstance(date_obj, datetime)
False

5、日期時間計算

# 年限加1
>>> date_obj + relativedelta.relativedelta(years=1)
datetime.date(2021, 11, 10)

# 月限減1
>>> date_obj - relativedelta.relativedelta(months=1)
datetime.date(2020, 10, 10)
>>> datetime_obj + relativedelta.relativedelta(months=-1)
datetime.datetime(2020, 10, 10, 15, 42, 53, 821000)

# 星期加減1
>>> date_obj + relativedelta.relativedelta(weeks=-1)
datetime.date(2020, 11, 3)
>>> date_obj + datetime.timedelta(weeks=1)
datetime.date(2020, 11, 17)

# 天數減1
>>> date_obj - relativedelta.relativedelta(days=1)
datetime.date(2020, 11, 9)

# 小時加1 >>> datetime_obj + datetime.timedelta(hours=1) datetime.datetime(2020, 11, 10, 16, 42, 53, 821000)

# 分鐘(minutes)、秒(seconds)、毫秒(microseconds)以此類推即可

6、日曆模組

>>> import calendar
>>> calendar.month(2018, 12)
   December 2018
Mo Tu We Th Fr Sa Su
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

# 設定每週以週三開始算
>>> calendar.setfirstweekday(2)
# 判斷是否是閏年 >>> print(calendar.isleap(2018)) False
# 返回某月的第一天是星期幾和這個月的天數 >>> print(calendar.monthrange(2018, 12)) (5, 31)
Python中時間日期格式化符號:
    ------------------------------------
    %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 當前時區的名稱