在日常工作中經常會遇到 python 時間格式轉換問題,如時間戳轉換為格式化時間、格式化時間轉換為時間戳,這裡做個總結。
在總結之前我們需要先弄清楚一個關鍵點:時區
時區:我們通常使用的時區一般分為 UTC
時間和 UTC+8 (東八)
時間,東八 CT — 中國標准時間 簡單理解為中國時間,UTC WET — 歐洲西部時區,GMT - 格林威治標准時間,簡單理解為英國時間。東八時間比 UTC 時間快八小時。
世界時區圖
import time
import pytz
import datetime
# 返回 東八 時間戳
def get_shanghai_timestamp(date_time):
time_zone = pytz.timezone('Asia/Shanghai')
timeArray = datetime.datetime.strptime(date_time, "%Y-%m-%d %H:%M:%S")
local_dt = timeArray.astimezone(time_zone)
print('>>>', int(time.mktime(local_dt.timetuple())))
get_timestamp('2018-07-13 16:00:00')
import time
import pytz
import datetime
# 返回 utc 時間戳
def get_utc_timestamp(utc_time_str, utc_format=r'%Y-%m-%d %H:%M:%S'):
local_tz = pytz.timezone('UTC') # 定義本地時區(東八時間比 utc 時間快8小時)
utc_dt = datetime.datetime.strptime(utc_time_str, utc_format) #將世界時間的格式轉化為datetime.datetime格式
local_dt = utc_dt.astimezone(local_tz) #想將datetime格式添加上世界時區,然後astimezone切換時區:世界時區==>本地時區
return int(time.mktime(local_dt.timetuple())) #返回當地時間戳
print(get_utc_timestamp('2018-07-13 16:00:00', utc_format='%Y-%m-%d %H:%M:%S'))
# 方式一:
import time
import pytz
import datetime
def get_local_format_time(timestamp):
local_time=time.localtime()
format_time=time.strftime("%Y-%m-%d %H:%M:%S", local_time)
return format_time
get_local_format_time(1529112900)
# 方式二:
def local_to_utc(local_ts, time_format=r'%Y-%m-%d %H:%M:%S'):
time_zone = pytz.timezone('Asia/Shanghai')
time_str = time.strftime(time_format, time.localtime(local_ts)) #首先將本地時間戳轉化為時間元組,用strftime格式化成字符串
dt = datetime.datetime.strptime(time_str, time_format) #將字符串用strptime 轉為為datetime中 datetime格式
utc_dt = dt.astimezone(time_zone) # astimezone切換為 utc 時區
return utc_dt.strftime(time_format) #返回 utc 格式化時間
get_local_format_time(1529112900)
def get_utc_format_time(local_ts, time_format=r'%Y-%m-%d %H:%M:%S'):
time_str = time.strftime(time_format, time.localtime(local_ts)) #首先將本地時間戳轉化為時間元組,用strftime格式化成字符串
dt = datetime.datetime.strptime(time_str, time_format) #將字符串用strptime 轉為為datetime中 datetime格式
utc_dt = dt.astimezone(pytz.utc) # astimezone切換為 utc 時區
return utc_dt.strftime(time_format) #返回 utc 格式化時間
get_utc_format_time(1529112900)