Python中基礎的時間操作

just4you發表於2020-12-12

時間日期格式化符號

  1. %Y:年,4位數
  2. %y:年,2位數
  3. %m:月,2位數(01-12)
  4. %d:天,2位數(01-31)
  5. %H:24小時制小時(00-23)
  6. %M:分鐘數(00-59)
  7. %S:秒數(00-59)
  8. %f:毫秒數

與java中常用的格式化方式(yyyy-MM-dd HH:mm:ss)有區別,特別是大寫“M”和小寫“m”。倒是跟MySQL中的格式化差不多。

時間的處理

python的時間處理,可使用內建的time模組,也可以使用datetime.datetime模組。

  1. 使用time模組,主要是對time.struct_time的例項進行操作
  2. 使用datetime.datetime模組,主要是對datetime.datetime的例項進行操作

獲取當前時間

使用time

import time

# 直接使用localtime()得到的是格林威治時間,比北京時間晚8小時
# now = time.localtime()
# 先用time.time()得到時間戳,再使用localtime(),取得的時間是本地時間
now = time.localtime(time.time())
# 直接列印的話,是一個time.struct_time的例項
print(now)
# 格式化輸出
print(time.strftime('%Y-%m-%d %H:%M:%S',now))

使用datetime

from datetime import datetime as dt

# 直接獲取的就已經是北京時間
now = dt.now()
# 直接列印,已經很像一個格式化時間了,但是帶有毫秒數
print(now)
# 格式化輸出
print(now.strftime('%Y-%m-%d %H:%M:%S'))

時間戳操作

使用time

# 獲取當前時間的時間戳
timestamp = time.time()
print('當前時間的時間戳:%s'%timestamp)

# 獲取某時間的時間戳
one_time = time.localtime()
tiamstamp = time.mktime(one_time)

# 時間戳轉時間
timestamp = 1607703000
t = time.localtime(timestamp)
print(time.strftime('%Y-%m-%d %H:%M:%S', t))

使用datetime

# 先取得時間,後獲取時間戳
now = dt.now()
timestamp = dt.timestamp(now)

# 時間戳轉時間
timestamp = 1607703000
t = dt.fromtimestamp(timestamp)
print(t)

取得年,月,日,時,分,秒

使用time

# 必須傳參,不然取得的不是北京時間
now = time.localtime(time.time())
print('%s年'%now.tm_year)
print('%s月'%now.tm_mon)
print('%s日'%now.tm_mday)
print('%s時'%now.tm_hour)
print('%s分'%now.tm_min)
print('%s秒'%now.tm_sec)

使用datetime

now = dt.now()
print('%s年'%now.year)
print('%s月'%now.month)
print('%s日'%now.day)
print('%s時'%now.hour)
print('%s分'%now.minute)
print('%s秒'%now.second)

自定義時間

使用time

貌似不太好定義

使用datetime

# 自定義2020年1月2日 3點4分5秒
c_time = dt(2020,1,2,3,4,5)
print(c_time)

# 自定義2020年1月2日,預設0點0分0秒
# 至少要有年月日三個引數
# 年:1~9999
# 月:1~12
# 日:1~28[29,30,31],注意閏月和大小月
c_time = dt(2020,1,2)
print(c_time)

字串與時間互轉

使用time

str_time = '2020-12-12 12:12:12'

# 字串轉時間
t = time.strptime(str_time,'%Y-%m-%d %H:%M:%S')
print(t)

# 時間轉字串
str_time_2 = time.strftime('%Y-%m-%d %H:%M:%S', t)
print(str_time_2)

非官方解釋:

  1. strptime: 貌似是str parse time的縮寫,即:將字串解析成時間,返回一個時間物件
  2. strftime: 貌似是str from time的縮寫,即:從時間中取得字串,返回一個字串

使用datetime

str_time = '2020-12-12 12:12:12'

# 字串轉時間,使用的方法名稱和time相同,但是返回的時間型別是datetime.datetime
t = dt.strptime(str_time,'%Y-%m-%d %H:%M:%S')
print(t)

# 時間轉字串的方法名稱與time相同,但是用法有區別
str_time_2 = t.strftime('%Y-%m-%d %H:%M:%S')
print(str_time_2)

時間的加減操作

使用time

貌似不太好操作

使用datetime

datetime.timedelta用於表示時間間隔

from datetime import datetime as dt
from datetime import timedelta as 
  1. “日期時間”與“時間間隔”進行加減操作,得到一個新的“日期時間”
now = dt.now()
# 定義一個時間間隔:365天
one_year = td(days=365)
# 把這個時間間隔直接加到當前時間上
next_year = now + one_year
print(next_year)

# 定義一個間隔:1天23小時4分10秒
time_diff = td(days=1, hours=23,minutes=4,seconds=10)
next_time = now + time_diff
print(next_time)

next_time = now - time_diff
print(next_time)
  1. “日期時間”與“日期時間”相減,得到一個“時間間隔”
now = dt.now()
next_time = dt(2022,1,1)

time_diff = next_time - now
print(time_diff)

# 可得出兩個時間的間隔天數
print(time_diff.days)
# 可得出兩個時間的間隔秒數(不包括整天,就是湊不夠一天的時間的秒數)
print(time_diff.seconds)

# 可得出兩個時間的間隔總秒數,貌似沒有直接獲取小時,分鐘的方法,得自己計算:(
print(time_diff.total_seconds())
  1. “時間間隔”與“時間間隔”進行加減操作,得到一個新的“時間間隔”
time_diff_a = td(days=1, hours=23,minutes=4,seconds=10)
time_diff_b = td(days=2, minutes=55,seconds=50)

# 相加
time_diff_c = time_diff_a + time_diff_b
print(time_diff_c)
print(type(time_diff_c))

# 相減
time_diff_d = time_diff_a - time_diff_b
print(time_diff_d)
  1. “日期時間”與“日期時間”相加,必須報錯:)

小結

  1. datetime比time好用。
  2. python裡時間日期相關類,既有time.struct_time,又有datetime.datetime,有點不習慣。

相關文章