[PY3]——時間處理——datetime | calendar

Jelly_lyj發表於2017-03-18

Python3的日期/時間處理模組

datetime的格式化符號

     格式化符號       

表示

%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

當前時區的名稱

獲取日期和時間

1. datetime

# 獲取當前日期和時間
print(datetime.now())
2017-08-17 14:38:27.417507
print(datetime.now().month)
8
print(datetime.now().minute)
41
# 構造指定日期和時間 
dt=datetime(2017,6,25,9,0,1)
print(dt)
2017-06-25 09:00:01

# datetime本身有日期時間格式的容錯
dt=datetime(2017,6,25,25,00)
ValueError: hour must be
in 0..23

2. calendar

# 獲取某個月的日曆
import
calendar print(calendar.month(2017,8)) August 2017 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

 

datetime <—> timestamp

# datetime——>timestamp: datetime.timestamp()
dt=datetime(2017,6,25,9,0,1)
print(dt.timestamp())
1498395601.0

# timestamp()——>datetime: datetime.fromtimestamp(t)
t=1498395601.0
print(datetime.fromtimestamp(t))      #本地時間2017-06-25 09:00:01
print(datetime.utcfromtimestamp(t))   #UTC時間2017-06-25 13:00:01

 

str<——>datetime:strptime(str,格式化字串)

# str——>datetime:strptime(str,格式化字串)
text="2017-06-25 12:01:02" cdate=datetime.strptime(text,'%Y-%m-%d %H:%M:%S') print(cdate,type(cdate)) 2017-06-25 12:01:02 <class 'datetime.datetime'> 0:00:00.001838 //執行時間 # 實際上由於strptime()的效能較差,我們可以自定義一個類似下面這樣的函式來實現str—>datetime
def parse_dt(*args): if len(args)==1: y,mo,r=args[0].split('-') return datetime(int(y),int(mo),int(r)) else: y,mo,r=args[0].split('-') h,mi,s=args[1].split(':') return datetime(int(y),int(mo),int(r),int(h),int(mi),int(s)) dt=parse_dt('2017-6-25','12:01:02') print(dt,type(dt)) 2017-06-25 12:01:02 <class 'datetime.datetime'> 0:00:00.000019 //執行時間

# datetime——>str:strftime(datetime,格式化字串)
dt=datetime(2017,6,25,9,0,1)
cdate=datetime.strftime(dt,'%A %B %d,%Y') //根據python格式化格式來輸出想要的結果即可
print(cdate)
Sunday June 25,2017

 

時間計算/判斷

1. 計算時間間隔

d1=parse_dt('2017-8-21','14:00:00')
d2=parse_dt('2017-8-21','18:30:00')

#計算時間差
print(type(d2-d1))
#<class 'datetime.timedelta'>

print((d2-d1))
#4:30:00

print((d2-d1).days)
#0

print((d2-d1).seconds)
#16200
# datetime加減:時間往後或往前計算
dt=datetime.now()
print(dt)
#2017-08-21 09:43:47.183234

print(dt+timedelta(hours=1))
#2017-08-21 10:43:47.183234

print(dt-timedelta(hours=1))
#2017-08-21 08:43:47.183234

print(dt-timedelta(days=1,hours=1))
#2017-08-20 08:43:47.183234

2. 判斷某天是周幾

#判斷某天是周幾
def gz_weekday(year,month,day):
    x=calendar.weekday(year,month,day)
    if x==0:
        print("星期一")
    if x==1:
        print("星期二")
    if x==2:
        print("星期三")
    if x==3:
        print("星期四")
    if x==4:
        print("星期五")
    if x==5:
        print("星期六")
    if x==6:
        print("星期日")
gz_weekday(2017,8,17)
星期四

3. 判斷閏年

#判斷是否為閏年
print(calendar.isleap(2020))
#True
print(calendar.isleap(2017))
#False
print(calendar.leapdays(2000,2020))
#5

4. 計算上一個週五/下一個週五

#計算上一個星期五/下一個星期五
from dateutil.relativedelta import relativedelta
from dateutil.rrule import *

dt=datetime.now()
print(dt)
#2017-08-21 11:21:40.470703

print(dt+relativedelta(weekday=FR))  #其他Mo、等都同理
#2017-08-25 11:21:40.470703

print(dt+relativedelta(weekday=FR(-1)))
#2017-08-18 11:21:40.470703

 5. 計算某個月有幾天

#計算某個月有幾天
import calendar
# monthrange(year, month)
#     Return weekday (0-6 ~ Mon-Sun) and number of days (28-31) for year, month.
print(calendar.monthrange(2018,2))
#(3, 28)

print(calendar.monthrange(2017,10))
#(6, 31)

 

補充:calender模組常見函式

序號

函式及描述

1

calendar.calendar(year,w=2,l=1,c=6)

返回一個多行字串格式的year年年曆,3個月一行,間隔距離為c。 每日寬度間隔為w字元。每行長度為21* W+18+2* C。l是每星期行數。

2

calendar.firstweekday( )

返回當前每週起始日期的設定。預設情況下,首次載入caendar模組時返回0,即星期一。

3

calendar.isleap(year)

是閏年返回True,否則為false。

4

calendar.leapdays(y1,y2)

返回在Y1,Y2兩年之間的閏年總數。

5

calendar.month(year,month,w=2,l=1)

返回一個多行字串格式的year年month月日曆,兩行標題,一週一行。每日寬度間隔為w字元。每行的長度為7* w+6。l是每星期的行數。

6

calendar.monthcalendar(year,month)

返回一個整數的單層巢狀列表。每個子列表裝載代表一個星期的整數。Year年month月外的日期都設為0;範圍內的日子都由該月第幾日表示,從1開始。

7

calendar.monthrange(year,month)

返回兩個整數。第一個是該月的星期幾的日期碼,第二個是該月的日期碼。日從0(星期一)到6(星期日);月從1到12。

8

calendar.prcal(year,w=2,l=1,c=6)

相當於 print calendar.calendar(year,w,l,c).

9

calendar.prmonth(year,month,w=2,l=1)

相當於 print calendar.calendar(year,w,l,c)。

10

calendar.setfirstweekday(weekday)

設定每週的起始日期碼。0(星期一)到6(星期日)。

11

calendar.timegm(tupletime)

和time.gmtime相反:接受一個時間元組形式,返回該時刻的時間輟(1970紀元後經過的浮點秒數)。

12

calendar.weekday(year,month,day)

返回給定日期的日期碼。0(星期一)到6(星期日)。月份為 1(一月) 到 12(12月)。

相關文章