1. 程式人生 > >一文搞定python的時間處理

一文搞定python的時間處理

time模組

# -*- coding: utf-8 -*-
# author:           inpurer(月小水長)
# pc_type           lenovo
# create_date:      2018/12/3
# file_name:        timetest.py
# description:      月小水長,熱血未涼

import time

t0 = time.time()
#description:   輸出當前時間距離1970.1.1的秒數,精確到小數點後6位,也叫做時間戳
#output sample: 1543799532.602318
print(t0)

t1 = time.localtime(t0)
#description:   把時間戳轉成元組,包含七個元素,前六個見名知意,tm_wday是指今天是當前周的第幾天(index from 0),tm_yday類似,tm_isdst是否是夏令時,不用關心
#output sample: time.struct_time(tm_year=2018, tm_mon=12, tm_mday=3, tm_hour=9, tm_min=22, tm_sec=24, tm_wday=0, tm_yday=337, tm_isdst=0)
print(t1)
#so,可以這樣輸出今天是今年的第多少天
print(t1[-2]+1)


#下面是對該元組的格式化

#description:   簡單可讀形式
#output sample: Mon Dec  3 09:31:18 2018
t2 = time.asctime(t1)
print(t2)

#description:   可通過引數設定成各種形式,下面是一種標準形式,各引數見名知意
#output sample: 2018-12-03 09:33:36
t3 = time.strftime("%Y-%m-%d %H:%M:%S", t1)
print(t3)
#%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 當前時區的名稱
# %% %號本身


# 下面是把格式化字串轉成元組
# description:      第一個引數個格式化後的字串,後一個引數和格式化對應,便於反格式化
# output sample:    time.struct_time(tm_year=2018, tm_mon=12, tm_mday=3, tm_hour=9, tm_min=47, tm_sec=7, tm_wday=0, tm_yday=337, tm_isdst=-1)
t4 = time.strptime(t3,'%Y-%m-%d %H:%M:%S')
print(t4)

# 把元組轉成時間戳
#description:   是time.localtime的反函式,不過由於格式化的原因,精度有所下降
#output sample: 1543801627.0
t5 = time.mktime(t4)
print(t5)

datetime模組

# -*- coding: utf-8 -*-
# author:           inpurer(月小水長)
# pc_type           lenovo
# create_date:      2018/12/3
# file_name:        timetest.py
# description:      月小水長,熱血未涼

import datetime

#通過datetime.datetime.now()可以獲得當前日期時間的一個例項
#這個例項是一個datetime類物件而不是字串
#雖然直接列印該例項輸出的是一個字串,只是呼叫datetime實現的__str__方法而已
t0 = datetime.datetime.now()
print(t0)           #print: 2018-12-03 12:55:49.905971
print(type(t0))     #print: <class 'datetime.datetime'>

#然後就可以通過物件名.的方法輸出各個時間資訊,該資訊是一個int型別
print(t0.year)          #print: 2018
print(type(t0.year))    #print: <class 'int'>
print(t0.month)
print(t0.day)
print(t0.hour)
print(t0.minute)
print(t0.second)

時間的儲存,比較

儲存

理論上我們可以通過拼接datetime.datetime.now()例項的各個時間變數來構建我們自己的想要時間,例如我們想要儲存year-month-day這樣的時間資訊,我們可以這樣做:

import datetime
t0 = datetime.datetime.now()
#注意year/month/day都是int型別,不像java那樣可以直接拼接字串和數字
wanted_time = str(t0.year)+"-"+str(t0.month)+"-"+str(t0.day)

但是,這樣做會有非常尷尬的問題:格式不統一,可能會出現下面這樣的儲存形式:

2018-1-1
2018-1-11
2018-11-1
2018-11-11

特別是在資料量非常龐大的時候,閱讀起來非常費力,這是因為year/month/day這些都是int型,所以1就是1,不會顯示成01,要實現對齊效果,必須還得字串的格式化,所以,我們通常用的是time模組(其實datetime也有字串的格式化,不過展開講就太多了,不必要浪費這麼多學習成本)

import time
t0 = time.localtime()
wanted_time = time.strftime("%Y-%m-%d",t0)

比較

就拿上面剛剛說的wanted_time來說,可以直接通過>=<這些符號來比較,因為wanted_time就是一個字串。