datetime
# -*- coding:utf8 -*-
"""
# editor: hjjdreamer
# create-time: 2023/1/22-8:51
# Python-Script: 27_datetime.py
# describe:
4个类
datetime.date == 年月日
datetime.time == 时分秒
datetime.datetime == 年月日+时分秒
datetime.timedelta == 时间差
"""
import datetime
# datetime.date
# 生成日期
d = datetime.date.today()
print(d, type(d))
# 2023-01-22 <class 'datetime.date'>
d1 = datetime.date(2022, 8, 24)
print(d1, type(d1))
import time
d2 = datetime.date.fromtimestamp(time.time())
print(d2, type(d2))
# 类属性
print(datetime.date.min)
print(datetime.date.max)
print(datetime.date.resolution) # timedelta == 最小时间差
# 0001-01-01
# 9999-12-31
# 1 day, 0:00:00
# 实例属性
print(d.year)
print(d.month)
print(d.day)
# 常用实例方法
# datetime.date对象 == 结构化时间对象
print(d.timetuple())
# time.struct_time(tm_year=2023, tm_mon=1, tm_mday=22, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=22, tm_isdst=-1)
# 其他方法
# replace
# year
print(d.replace(2020))
# month
print(d.replace(d.year, 9))
# day
print(d.replace(day=20))
print(d.replace(d.year, d.month, 20))
# 从0001-01-01到现在的天数
print(d.toordinal())
print(d.weekday()) # 0代表周一 6
print(d.isoweekday()) # 1代表周一,0代表周日 7
print(d.isoformat()) # 2023-01-22
print(d.strftime("%Y年%m月%d日")) # 字符串格式化
print("\n===========datetime.time=============\n")
print("{:=^50s}".format("datetime.time"))
# time
# 生成时间
t = datetime.time(15, 10, 45, 888888)
print(t, type(t))
# 类方法
print(datetime.time.min)
print(datetime.time.max)
print(datetime.time.resolution)
# 实例属性
print(t.hour)
print(t.minute)
print(t.second)
print(t.microsecond)
# 其他方法
print(t.isoformat())
print(t.strftime("%H时%M分%S秒 %f微分"))
print("\n{:=^50s}".format("datetime.datetime"))
# datetime.datetime
# 生成日期时间
dt = datetime.datetime(2019, 7, 15, 13, 24, 45, 888888)
print(dt, type(dt))
dt1 = datetime.datetime.now(tz=None)
print(dt1, type(dt1))
dt2 = datetime.datetime.today()
print(dt2, type(dt2))
dt3 = datetime.datetime.utcnow()
print(dt3, type(dt3))
# 时间戳 ==> dt4
dt4 = datetime.datetime.fromtimestamp(time.time())
print(dt4, type(dt4))
dt5 = datetime.datetime.utcfromtimestamp(time.time())
print(dt5, type(dt5))
# 字符串 ==> dt
dt6 = datetime.datetime.strptime("2020-07-14 04:13:46", "%Y-%m-%d %H:%M:%S")
print(dt6, type(dt6))
# date,time ==> datetime
print(d)
print(t)
dt7 = datetime.datetime.combine(d, t)
print(dt7, type(dt7))
# 属性
print(dt)
print(t)
print(dt.year)
print(dt.month)
print(dt.day)
print(t.minute)
print(dt.second)
print(dt.microsecond)
# replace
print(dt.replace(second=57,day=20))
# datetime ==> 结构化对象
print(dt.timetuple())
# datetime ==> 时间戳
print(dt.timestamp())
# datetime ==> 格式化字符串
print(dt.strftime("%Y年%m月%d日 %H时%M分%S秒 %f微分"))
# 时间戳 ==> datetime
print(datetime.datetime.fromtimestamp(time.time()))
# 格式化对象 ==> datetime
print(datetime.datetime.strptime("2020-07-14 04:13:46", "%Y-%m-%d %H:%M:%S"))
# 结构化对象 ==> datetime
print(datetime.datetime.fromtimestamp(time.mktime(time.localtime())))
print("\n{:=^50s}".format("datetime.timedate"))
# datetime.timedate
# class datetime.timedelta(days=0,second=0,microseconds=0,millisecond=0,hours=0,weeks=0)
# 生成时间差
td = datetime.timedelta(days=10)
print(td, type(td))
td1 = datetime.timedelta(days=10, hours=5)
print(td1, type(td1))
td2 = datetime.timedelta(days=-10)
print(td2, type(td2))
td3 = datetime.timedelta(days=-20, hours=-10)
print(td3, type(td3))
td4 = datetime.timedelta(hours=75)
print(td4, type(td4))
td5 = datetime.timedelta(weeks=2)
print(td5, type(td5))
# 计算目标日期
dt = datetime.datetime.today()
print("现在是 {}".format(dt.strftime("%Y年%m月%d日 %H时%M分%S秒")))
delta = datetime.timedelta(days=10)
target = dt + delta
print("十天后是 {}".format(target.strftime("%Y年%m月%d日 %H时%M分%S秒")))
delta = datetime.timedelta(weeks=1)
target = dt + delta
print("一周后是 {}".format(target.strftime("%Y年%m月%d日 %H时%M分%S秒")))
delta = datetime.timedelta( hours=-5)
target = dt + delta
print("五小时前是 {}".format(target.strftime("%Y年%m月%d日 %H时%M分%S秒")))
# 计算时间差
dt1 = datetime.datetime.today()
dt2 = datetime.datetime.utcnow()
td = dt1 - dt2
print("我们与utc3时间的差异是:{:.0f}小时".format(td.seconds/3600))
在Jupyter上的一些测试
import datetime
from datetime import date, timedelta
end = datetime.datetime.strptime("2022-05-01","%Y-%m-%d").replace(day=1) - timedelta(days=1)
print(end)
endate = datetime.datetime.date(end)
print(endate)
time
# -*- coding:utf8 -*-
"""
# editor: hjjdreamer
# create-time: 2023/1/23-7:43
# Python-Script: 28_time.py
# describe:
时间戳
结构化时间对象
格式化时间字符串
"""
import time
#时间戳 1970.01.01 到指定时间时间间隔,单位是秒
print(time.time())
print(time.time() - 3600)
# 结构化时间对象
st = time.localtime()
print(type(st))
print(st)
# <class 'time.struct_time'>
# time.struct_time(tm_year=2023, tm_mon=1, tm_mday=23, tm_hour=8, tm_min=18, tm_sec=10, tm_wday=0, tm_yday=23, tm_isdst=0)
print("今天是 {}-{:02d}-{}".format(st[0],st[1],st[2]))
print("今天是星期{}".format(st.tm_wday + 1))
# 对象的属性是只读的
# st.tm_yday = 196
# 格式化时间字符串
print(time.ctime())
# strftime(时间格式) "%Y-%m-%d %H:%M:%S"
print(time.strftime("%Y-%m-%d %H:%M:%S"))
print(time.strftime("%Y年%m月%d日 %H时%M分%S秒"))
print(time.strftime("%Y-%m-%d %H:%M:%S %a"))
print(time.strftime("%Y-%m-%d %H:%M:%S %A"))
print(time.strftime("%Y-%m-%d %H:%M:%S %b"))
print(time.strftime("%Y-%m-%d %H:%M:%S %B"))
print(time.strftime("%Y-%m-%d %H:%M:%S %p"))
print(time.strftime("%Y-%m-%d %H:%M:%S %w"))
print(time.strftime("%Y-%m-%d %H:%M:%S %W"))
# 2023-01-23 10:47:13
# 2023年01月23日 10时47分13秒
# 2023-01-23 10:47:13 Mon
# 2023-01-23 10:47:13 Monday
# 2023-01-23 10:47:13 Jan
# 2023-01-23 10:47:13 January
# 2023-01-23 10:47:13 AM
# sleep
t1 = time.time()
print("sleep begin")
time.sleep(1.25)
print("sleep end")
t2 = time.time()
print("执行了 {:.3f} 秒".format(t2 - t1))
# 时间格式转换
# 时间戳 ==> 结构化对象
# UTC
print(time.gmtime())
print(time.gmtime(time.time()-3600))
# Local
print(time.localtime())
print(time.localtime(time.time()-3600))
# 结构化对象 ==> 时间戳
# mktime(st)
print(time.time())
print(time.mktime(time.localtime()))
# 结构化对象 ==> 格式化时间字符串
# strftime(format, st)
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
# 格式化字符串 ==> 结构化时间对象
# strptime(str, format)
strtime1 = "2020-07-25 13:32:18"
print(time.strptime(strtime1, "%Y-%m-%d %H:%M:%S"))