一、time、datetime、date之间转换
概念: 首先需要理解三个名词: 时间戳(int), 时间数组, 日期格式(str)
utc time : 国际时间(伦敦时间)
localtime: 本地时间时间(如北京时间 = 伦敦时间 + 8小时)
国际时间获取: time.gmtime() datetime.datetime.utcnow()
本地时间获取: time.localtime() datetime.datetime.now()
import time
# 1.时间戳(本地)
s = time.time()
print('时间戳:', s)
>> 1540975769.3088
# 2.时间数组
time_array = time.localtime() # localtime
time_array2 = time.gmtime() # utc time
print('本地时间数组:', time_array)
print('utc时间数组:', time_array2)
>> 本地时间数组: time.struct_time(tm_year=2018, tm_mon=10, tm_mday=31, tm_hour=16, tm_min=50, tm_sec=53, tm_wday=2, tm_yday=304, tm_isdst=0)
# 3.日期格式(str)
dt = time.strftime('%Y-%m-%d %H:%M:%S', time_array)
print('日期格式(str):', dt)
>> 日期格式(str): 2018-10-31 16:50:53
1、时间戳转日期(秒 -> 数组 -> 日期): time.strftime() 类似 datetime.datetime.strftime()
s = 1540878671 # 单位: s; 也就是只有10位数,超过将无法转化
array = time.gmtime(s)
dt = time.strftime('%Y-%m-%d %H:%M:%S', array)
print("时间戳转化的日期:", dt)
>> 时间戳转化的日期:2018-10-30 08:51:11
2、日期转时间戳(日期 -> 数组 -> 秒): time.strptime() 类似 datetime.datetime.strptime()
dt = '2018-10-30 08:51:11'
array = time.strptime(dt, '%Y-%m-%d %H:%M:%S')
s = time.mktime(array)
print("日期转化的时间戳:", s)
>>日期转化的时间戳:1540860671.0
二、分别获取今天、昨天、上周、上月、去年的此刻时间
首先安装: pip install python-dateutil
相差天数函数: datetime.timedelta(days=1)
相差月份函数:relativedelta(months=1)
from dateutil.relativedelta import relativedelta
import datetime
today = datetime.date.today() # 今天
yesterday = today - datetime.timedelta(days=1) # 昨天
Lastweek = today - datetime.timedelta(days=7) # 上周
Nearly_month = today - datetime.timedelta(days=30) # 前30天
Last_month = datetime.date.today() - relativedelta(months=1) # 上月
Last_year = datetime.date.today() - relativedelta(months=12) # 去年
上述获取到的结果为<class 'datetime date'>,
转化为日期格式(str): datetime.date.strftime(Last_year, '%Y-%m-%d')
Demo:
输入年月日,得知其为当年的第几天?
今天日期减去年12月31日的日期即可
import datetime
y = int(input('请输入4位数字的年份:')) # 获取年份
m = int(input('请输入月份:')) # 获取月份
d = int(input('请输入是哪一天:')) # 获取“日”
targetDay = datetime.date(y, m, d) # 将输入的日期格式化成标准的日期
dayCount = targetDay - datetime.date(targetDay.year - 1, 12, 31) # 减去上一年最后一天
print('%s是%s年的第%s天。'% (targetDay, y, dayCount.days))
---------------------------------------------更新 2019-9-27 14:56:18--------------------------------------------------
1.获取时区,获取指定时区时间
import pytz
import datetime
print(pytz.country_timezones('cn')) # 查询中国所拥有的时区
print(pytz.country_timezones('us')) # 查询美国所拥有的时区
tz = pytz.timezone('Asia/Shanghai')
# datetime.datetime.now()方法 需要传递一个时区,如果不传,就默认是当前用户所在时区
# 得到指定时区的当前时间,然后并将时间进行格式化
user_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
print(user_time)
2.带T时间字符串转换
from datetime import datetime
s = '2020-02-21T03:56:03.755Z'
ret1 = datetime.strptime(s, "%Y-%m-%dT%H:%M:%S.%fZ")
ret2 = datetime.date(ret1)
print(ret1)
print(ret2)
>> 2020-02-21 03:56:03.755000
>> 2020-02-21
3.输入日期区间列出所有区间内所有日期
def date_range(self, beginDate, endDate):
import datetime
dates = []
dt = datetime.datetime.strptime(beginDate, "%Y-%m-%d")
date = beginDate[:]
while date <= endDate:
dates.append(date)
dt = dt + datetime.timedelta(1)
date = dt.strftime("%Y-%m-%d")
return dates
ret = date_range("2020-01-10", "2020-01-20")
4.字符串时间 加减时间天数
import datetime
enddate = '2020-04-08'
dt = datetime.datetime.strptime(enddate, "%Y-%m-%d") + datetime.timedelta(1)
print('dt:', dt)
print('dt-day:', dt.date())
>> dt: 2020-04-09 00: 00:00
>> dt-day: 2020-04-09