python腳本中經常會需要進行時間格式字符串和時間戳的轉換,另外,也記一下datetime的用法。
用到time模塊的地方都需要引入import time
字符串時間變成時間戳
match_time = '2018-05-22 08:30:00' ans_time_stamp = time.mktime(time.strptime(match_time, "%Y-%m-%d %H:%M:%S"))
轉換成的時間戳是float類型
時間戳轉年月日時間樣式的字符串
# time.tme() 得到的是float型時間戳 struct_time = time.localtime(time.time()) # 得到結構化時間格式 now_time = time.strftime("%Y-%m-%d %H:%M:%S", struct_time)
datetime格式變時間戳
用pymysql從數據庫取出來的時間,如果不為空(記得判斷是否為空)則是 datetime
類型,可以直接相減得到 datetime.timedelta
類型,該類型想變時間戳用total_seconds()
函數。
delta_time = check_time - ipo_time print(delta_time.total_seconds())
若是datetime
類型直接變時間戳用如下方法:
import datetime import time dtime = datetime.datetime.now() print(dtime) ans_time = time.mktime(dtime.timetuple()) print(ans_time)
字符串轉別的時間格式
# Wed May 09 00:00:00 CST 2018 轉 2018-05-09 00:00:00 time_str = 'Wed May 09 00:00:00 CST 2018' dt = datetime.datetime.strptime(time_str, "%a %b %d %X %Z %Y")
直接從字符串中提取月日
import datetime a = '2018-10-03 00:55:00' b = datetime.datetime.strptime(a, '%Y-%m-%d %H:%M:%S').strftime('%m-%d')
得到今天昨天日期
today = datetime.date.today() yesterday = today - datetime.timedelta(days=1) # 若要轉成字符串還需要用str()
得到某月或某年
tmp_time = datetime.date(2018, 7, 20)
tmp_time.month
tmp_time.year
得到上個月
>>> import datetime >>> today = datetime.date.today() >>> first = today.replace(day=1) >>> first datetime.date(2018, 10, 1) >>> last_month = first - datetime.timedelta(days=1) >>> print(last_month.strftime("%Y%m")) 201809
得到下個月的同一日
import datetime from dateutil.relativedelta import relativedelta today = datetime.date.today() next_month_day = today + relativedelta(months = 1) print(next_month_day)
當前日期時間
import datetime print datetime.datetime.now() # 2018-05-08 16:53:30.101000
格式化時間
import datetime print datetime.datetime.now().strftime("%Y-%m-%d %H:%M") # 2018-05-08 16:54
多加一天
import datetime print (datetime.datetime.now()+datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S") # 2018-05-09 16:56:07
減一天
import datetime print (datetime.datetime.now()+datetime.timedelta(days=-1)).strftime("%Y-%m-%d %H:%M:%S") # 2018-05-07 16:56:59
其他類似
import datetime in_date = '2016-08-31' dt = datetime.datetime.strptime(in_date, "%Y-%m-%d") out_date = (dt + datetime.timedelta(days=2)).strftime("%Y-%m-%d") print(out_date) # 2016-09-02
可以把days改為hours minutes,就可以提前XX小時/分鍾了。
timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[,
hours[, weeks]]]]]]])
減去一年
import datetime from dateutil.relativedelta import relativedelta d = datetime.datetime.strptime('20180131', '%Y%m%d') print(d) // 2018-01-31 00:00:00 print((d - relativedelta(years=1)).strftime('%Y%m%d')) // 20170131
還可以把years改為months
時區轉換
from datetime import datetime from datetime import timezone from datetime import timedelta # 世界標准時間 utc_time = datetime(2019, 7, 30, 7, 50, 0) # 北京時間UTC+8 cst_time =utc_time.astimezone(timezone(timedelta(hours=-8))).strftime("%Y-%m-%d %H:%M:%S")