naive aware
对于datetime.datetime和datetime.time类型才有aware对象,即他们可以设置tzinfo
tzinfo属性不为空且tzinfo.utcoffset返回也不为空
最佳实践:都先使用utc时间,之后返回给页面有要求时再转换为本地时间
datetime.datetime.now(datetime.timezone.utc)
datetime中的date部分、time部分,是理想化的表示,始终存在
timedelta代表时差,tzinfo代表时区(该类为抽象类,应使用timezone)
这些类型都是不可变的对象
关于strftime和strptime的模板
%d按月计算的天数 %m两位数的月数 %y%Y两位数和四位数的年数
%H是24小时制的小时 %I是12小时制的小时
%M两位数的分钟数 %S两位数的秒数 %j三位数的按年算的天数
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
接受的参数最终会转化为 days seconds microseconds
min max resolution
支持的操作
1、两个timedelta相加减
2、和一个整数相乘 和一个浮点数相乘
3、两个timedelta或和一个整数或浮点数(相除、整除、求余、divmod)
4、可设置正负号
5、abs str repr
6、两个timedelta可比较
total_seconds
返回的是timedelta所代表的总秒数
date
date(year, month, day)
today
date.fromtimestamp(time.time())
fromtimestamp(timestamp)
返回的是本地时间
fromordinal(n)
返回从1年1月1日开始算,加上n天后得到的日期
fromisoformat(YYYY-MM-DD)
返回按照YYYY-MM-DD字符串传入的日期
fromisocalendar(year, week, day)
通过iso calender构造的日期
min max resolution year month day
支持的操作
1、和timedelta相加减
2、两个date相减
3、两个date比较
replace(year=self.year, month=self.month, day=self.day)
替换为参数指定的date
timetuple()
返回一个 time.struct_time((d.year, d.month, d.day, 0, 0, 0, d.weekday(), yday, -1))
toordinal()
返回天数
weekday()
返回按周算的天数 星期一是0 星期日是6
isoweekday
返回按周算的天数 星期一是1 星期日是7
isocalendar()
isoformat
返回ISO8601形式的字符串 YYYY-MM-DD
ctime
返回的c语言版本的字符串表示形式
time.ctime(time.mktime(d.timetuple()))
strftime
返回字符串
datetime
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
year month day 必填
在创建时提供时区tzinfo信息的,最好只使用utc,使用其他timezone会造成问题
today now
返回本地时间 naive
now函数另可接收tz,此时返回的是aware
utcnow
返回当前的utc时间 naive
但是naive的时间被很多datetime的方法视为本地时间,所以最好还是使用aware的时间来代表UTC时间datetime.now(timezone.utc)
fromtimestamp(timestamp, tz=None)
按时间戳返回本地时间 naive
另可接收tz,此时返回的是aware
utcfromtimestamp
返回utc时间 naive
fromordinal
combine
fromisoformat YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]
fromisocalendar
strptime
min max resolution year month day hour minute second microsecond tzinfo fold
支持的操作
1、和timedelta相加减
2、两个datetime相减
3、两个datetime比较
date
time
timetz
replace(year=self.year, month=self.month, day=self.day, hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)
astimezone(tz=None)
utcoffset
dst
tzname
timetuple
utctimetuple
toordinal
timestamp
weekday
isoweekday
isocalendar
isoformat
ctime
strftime
time
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
min max resolution hour minute second microsecond tzinfo fold
time.fromisoformat
replace(hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)
isoformat
strftime
utcoffset
dst
tzname
tzinfo
utcoffset
dst
tzname
fromutc
tzinfo
是抽象基类 不可直接实例化
utcoffset
返回向对于utc时间的偏移
dst
tzname
fromutc
timezone(offset, name=None)
offset必须为timedelta对象,代表到utc的偏移