python日期及时间格式转换

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")

 

posted @ 2021-05-09 16:11  jason_wei  阅读(2632)  评论(0编辑  收藏  举报