本文承接前文:https://blog.csdn.net/weixin_44013214/article/details/103116581
本文介绍时间模块datetime的剩余部分的内容
datetime类
datetime类是一个单独的类,包含了date类和time类的所有方法和属性,可以看成是date类和time类的组合
class datetime.datetime(year,month,day,hour=0,minute=0,second=0,microsecond=0,
tzinfo=None,*,fold=0)
注:对于datetime对象,参数year,month,day是必须有的,其他参数是可选的.
参数范围
参数 | 范围 |
---|---|
year | [datetime.MINYEAR, datetime.MAXYEAR] |
month | [1, 12] |
day | 1–28,29,30,31(根据实际年份月份确定) |
hour | [0, 24) |
minute | [0, 60) |
second | [0, 60) |
microsecond | [0, 1000000) |
类方法(classmethod)
datetime.today()
- 作用:返回一个无tzinfo的当前日期时间的datetime对象
datetime.now(tz=None)
- 作用:返回一个当前日期时间的datime对象,若tz=None,则和datetime.today()一样的结果;同时,设置参数tz的值必须是timezone对象或者是基于tzinfo的类对象。
from datetime import datetime,timezone,timedelta
datetime.today()
# datetime.datetime(2019, 11, 19, 10, 15, 6, 361685)
datetime.now()
# datetime.datetime(2019, 11, 19, 10, 15, 15, 876817)
datetime.now(tz=timezone(timedelta(seconds=14400))
# datetime.datetime(2019, 11, 21, 5, 27, 14, 794799, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
datetime.utcnow()
- 作用:返回一个无tzinfo的UTC时区的日期时间.
datetime.utcnow()
# datetime.datetime(2019, 11, 21, 4, 6, 41, 56739)
datetime.fromtimestamp(timestamp, tz=None)
- 作用:将一个时间戳转化为一个datetime对,可以根据需要设置tz参数来设置时区信息
- 参数timestamp: 时间戳 ; 参数tz: 时区信息,tzinfo对象
datetime.utcfromtimestamp(timestamp)
- 作用:将时间戳转化为UTC时区 的datetime对象
- 参数 timestamp:时间戳
import time
from datetime import datetime, timezone, timedelta
datetime.fromtimestamp(time.time())
# datetime.datetime(2019, 11, 21, 12, 17, 5, 313839)
datetime.fromtimestamp(time.time(), tz=timezone(timedelta(hours-8)))
# datetime.datetime(2019, 11, 21, 12, 13, 46, 926916, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
# datetime.utcfromtimestamp(time.time())
# datetime.datetime(2019, 11, 21, 4, 32, 5, 891002)
datetime.fromordinal(ordinal)
- 作用:将一个相对于公元1年1月1日的序数,转化为对应的datetime对象,datetime对象的时间部分为0
- 参数 ordinal:整数,对于datetime对象或date对象可通过datetime.toordinal(year, month, day)或date.toordinal(year, month, day)获得.
from datetime import date, datetime
d = date(2019, 11, 10)
dt = datetime(2019, 11, 11, 12, 12, 42)
d_ordinal = d.toordinal()
# d_ordinal = 737373
dt_ordinal = dt.toordinal()
# dt_ordinal = 737374
datetime.fromordinal(d_ordinal)
# datetime.datetime(2019, 11, 10, 0, 0)
datetime.fromordinal(dt_ordinal)
# datetime.datetime(2019, 11, 11, 0, 0)
datetime.combine(date, time, tzinfo=self.tzinfo)
- 作用:将datetime.date对象和datetime.time对象合并成一个datetime对象.
- 参数:
- date:datetime.date对象
- time:datetime.time对象
- tzinfo:若有提供tzinfo参数则会使用该值;否则会使用time对象的tzinfo属性.
from datetime import date, time, datetime, timezone, timedelta
d = date(2019, 11, 21)
t = time(12, 52, 52, tzinfo=timezone(timedelta(hours=4)))
datetime.combine(d, t)
# datetime.datetime(2019, 11, 21, 12, 52, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
datetime.combine(d, t, tzinfo=timezone(timedelta(hours=8)))
# datetime.datetime(2019, 11, 21, 12, 52, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
datetime.strptime(date_string, format)
- 作用:将指定格式的时间日期字符串转化为datetime对象
- 参数
- date_string:格式为参数format设置的日期时间字符串
- format:格式设置字符
等价于:datetime.datetime(*(time.time.strptime(date_string, format)[0:6]))
date_string = "2019-11-21 12:52:52"
format1 = "%Y-%m-%d %H:%M:%S"
datetime.strptime(date_string, format1)
# datetime.datetime(2019, 11, 21, 12, 52, 52)
类属性(class attributes)
datetime.min:返回 datetime.datetime(MINYEAR, 1, 1, tzinfo=None)
datetime.max:返回 datetime.datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None)
datetime.resolution:返回两个互不相等的datetime对象的最小差值,即
datetime.timedelta(microseconds=1)
from datetime import datetime
datetime.min
# datetime.datetime(1, 1, 1, 0, 0)
datetime.max
# datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
datetime.resolution
# datetime.timedelta(microseconds=1)
实例属性(instance attributes)
属性 | 返回结果内容 |
---|---|
datetime.year | 年份 |
datetime.month | 月份 |
datetime.day | 天 |
datetime.hour | 小时 |
datetime.minute | 分钟 |
datetime.second | 秒 |
datetime.microsecond | 毫秒 |
datetime.tzinfo | 时区信息 |
实例方法(instance methods)
datetime.date():返回一个date对象,包含datetime对象的日期部分datetime.time():返回一个time对象,包含datetime对象的时间部分,不含tzinfo
datetime.timetz():返回一个time对象,包含datetime对象的时间部分,含tzinfo
from datetime import datetime, timezone, timedelta
dt =datetime(2019, 11, 21, 13, 29, 52, tzinfo=timezone(timedelta(hours=8)))
dt.date()
# datetime.date(2019, 11, 21)
dt.time()
# datetime.time(13, 29, 52)
dt.timetz()
# datetime.time(13, 29, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
datetime.replace(year, month, day, hour, minute, second, microsecond, tzinfo)
- 作用:通过传入相应的参数的值,改变datetime对象的对应值,返回一个全新的datetime对象(原datetime的值不会改变);若不传入值,则返回datetime的原值,
dt.replace()
# datetime.datetime(2019, 11, 21, 13, 29, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
dt.replace(year=2018)
# datetime.datetime(2018, 11, 21, 13, 29, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
dt # 原值不改变
# datetime.datetime(2019, 11, 21, 13, 29, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
datetime.astimezone(tz=None)
- 作用:将datetime对象转化为对应的时区tz的日期时间,返回一个新的datetime对象。
- 参数 tz:需要得到的时区;若为None,返回系统的所在的当前时区
from datetime import timezone, timedelta
dt = datetime(2019, 11, 21, 13, 29, 52, tzinfo=timezone(timedelta(hours=8))) # 中国标准时间
dt2 = datetime(2019, 11, 21, 13, 29, 52, tzinfo=timezone.utc) # UTC时区
dt.astimezone()
# datetime.datetime(2019, 11, 21, 13, 29, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), '中国标准时间'))
dt2.astimezone(tz=timezone(timedelta(hours=8))) # 将dt2转化为中国标准时间
# datetime.datetime(2019, 11, 21, 21, 29, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
datetime.timetuple()
- 作用:将datetime对象转化为一个当前时区的时间元组(struct_time),返回一个time.struct_time对象
datetime.utctimetuple()
- 作用:将datetime对象转化为一个UTC时区的时间元组(struct_time),返回一个time.struct_time()对象
dt.timetuple()
# time.struct_time(tm_year=2019, tm_mon=11, tm_mday=21, tm_hour=13, tm_min=29, tm_sec=52, tm_wday=3, tm_yday=325, tm_isdst=-1)
dt.utctimetuple()
# time.struct_time(tm_year=2019, tm_mon=11, tm_mday=21, tm_hour=5, tm_min=29, tm_sec=52, tm_wday=3, tm_yday=325, tm_isdst=0)
datetime.toordinal()
- 作用:将datetime对象转化为相对于公元1年1月1日的序数
dt.toordinal()
# 737384
datetime.timestamp()
- 作用:将datetime对象转化为对应的时间戳
dt.timestamp()
# 1574314192.0
datetime.weekday()
- 作用:得到datetime对象所在一周中的第几天,范围:[0, 6]
datetime.isoweekday()
- 作用:得到datetime对象所在ISO周中的第几天,范围:[1, 7]
datetime.isocalendar()
- 作用:将datetime对象转化为一个元组类型(ISO year, ISO week number, ISO weekday).
dt.weekday()
# 3
dt.isoweekday()
# 4
dt.isocalendar()
# (2019, 47, 4)
datetime.isoformat(sep=‘T’, timespec=‘auto’)
- 作用:将datetime对象转化为ISO格式的日期时间字符串
- 参数:
- sep:日期部分与时间部分的连接符,须是unicode 对象
- timespec:时间部分显示的模式选择
timespec | format |
---|---|
auto | 根据time对象的时间内容,自动选择下面的模式 |
hours | HH |
minutes | HH:MM |
seconds | HH:MM:SS |
microsecoonds | HH:MM:SS.ffff |
millisecondes | HH:MM:SS.sss |
注:除了milliseconds,其他模式,若出现了时间偏移量offsetime,则需要加上偏移量
dt.isoformat(sep='-', timespec="auto")
# '2019-11-21-13:29:52+08:00'
dt.isoformat(sep='>', timespec="minutes")
# '2019-11-21>13:29+08:00'
datetime.utcoffset():根据datetime对象的tzinfo,返回与UTC时区的时间偏移量,为timedelta对象
datetime.dst():根据datetime对象的tzinfo,返回是否夏令时
datetime.tzname():根据datetime对象的tzinfo,返回时区名称
dt.utcoffset()
# datetime.timedelta(seconds=28800)
dt.dst()
# None
dt.tzname()
# 'UTC+08:00'
timedelta类
timedelta类表示一个时间间隔值,即两个日期或时间的时间差值
class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
注:所有参数都是可选的,可以是int或float类型的数值,也可以是蒸熟或者负数。同时,传入参数后,timedelta只会存储days,seconds,microseconds三个参数的内容,对其他参数,会进行相关的运算转化,如下:
- 1 millisecond = 1000 microseconds
- 1 minute = 60 seconds
- 1 hour = 3600seconds
- 1 week = 7days
days, seconds, microseconds参数的取值范围:
- 0 <= microseconds < 1000000
- 0 <= seconds < 3600*24 (一天的总秒数)
- 999999999 <= days <= 999999999
from datetime import timedelta
timedelta(days=1, seconds=20, microseconds=232, milliseconds=999, minutes=2, hours=2, weeks=7)
# datetime.timedelta(days=50, seconds=7340, microseconds=999232)
timedelta(microseconds=-1)
# datetime.timedelta(days=-1, seconds=86399, microseconds=999999)
类属性(class atrributes)
timedelta.min:返回最小的负数timedelta对象,即timedelta(-999999999)
timedelta.max:返回最大的正数timedelta对象,即timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999).
timedelta.resolution:返回两个会不相等的timedelta对象的最小差值,即timedelta(microseconds=1)
实例属性(instance atrributes)
属性 | 值范围 |
---|---|
days | [-999999999, 999999999] |
seconds | [0, 86399] |
microseconds | [0, 999999] |
实例方法(instance methods)
timedelta.total_seconds()
- 作用:将timedelta对象转化为秒
td = timedelta(days=1, seconds=20, microseconds=232, milliseconds=999, minutes=2, hours=2, weeks=7)
td.total_seconds()
# 4327340.999232
timezone类
timezone类继承与基类tzinfo,它的每个实例都表示一个由UTC的固定偏移量定义的时区。
class datetime.timezone(offset, name=None)
参数 | 说明 |
---|---|
offset | timedelta类型,与UTC时区的时间间隔,范围:[-timedelta(hours=24), timedelta(hours=24)] |
name | 可选参数,字符串类型,设置时区的名称,可以被datetime对象通过实例方法tzname()获取。 |
类属性
timezone.utc:表示为UTC时区,即timezone(timedelta(0))
from datetime import datetime, timezone, timedelta
tz1 = timezone(timedelta(hours=3), name='East 3')
dt = datetime(2019, 11, 21, 15, 12, 52, tzinfo = tz1)
# dt = datetime.datetime(2019, 11, 21, 15, 12, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=10800), 'East 3'))
dt.tzname()
# 'East 3'
timezone.utc
# datetime.timezone.utc
总结:
本文及前文只是对时间模块datetime 中的相关类的属性和方法进行介绍,datetime模块还可以进行相关的算术运算,可以参考python官方文档进行了解。
笔者水平有限,若有错误,欢迎评论指出。