datetime模块提供了用于处理日期和时间的类和对应的方法,一般用于处理年、月、日、时、分、秒的统计和计算等需求。在支持日期时间数学运算的同时,实现的关注点更着重于如何能够更有效地解析其属性用于格式化输出和数据操作。

学习该模块,首先要有一个概念:日期和时间,要不然会混乱,这里进行狭义的理解即可:日期是日期,时间是时间,日常生活中有时候并没有很好的去区分。

日期:年月日,如 20210612

时间:时分秒,如 20:45:50

Python标准库中包含日期(date)和时间(time)的数据类型,还有日历方面的功能。要比较系统的学习该模块,需要了解下面的两个概念。

UTC(全球标准时间):是全球范围内计时的科学标准,它基于精心维护的原子钟,在全球范围内精确到微秒,由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。作为全球最精确的时间系统,天文学家、航海家、“太空跟踪网”(DSN) 以及其他科学性学科都使用它,它的参考点是英国格林威治标准时间(GMT):地球本初子午线的午夜,也是 UTC 的午夜 (00:00:00.000000)。本地时间是根据地球上不同时区所处的位置调整 UTC 得来的,比如当美国加州的太平洋时间为正午 12:00:00 时,UTC 为 20:00:00。

夏令时(DST):表示为了节约能源, 人为规定时间的意思。也叫夏时制,夏时令(Daylight Saving Time:DST),又称"日光节约时制"和"夏令时间”,在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。各个采纳夏时制的国家具体规定不同。全世界有近110个国家每年要实行夏令时。

感知型”和“简单型”对象:日期和时间对象可以根据它们是否包含时区信息而分为“感知型”和“简单型”两类。充分掌握应用性算法和政治性时间调整信息例如时区和夏令时的情况下,一个 感知型 对象就能相对于其他感知型对象来精确定位自身时间点。感知型对象是用来表示一个没有解释空间的固定时间点。简单型对象没有包含足够多的信息来无歧义地相对于其他 date/time 对象来定位自身时间点。

时间戳:Unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)

import time time.time() 1625483470.3409266

一、datetime模块概

Python内置的时间模块datetime包含下面的模块包含六个类和两个常数,提供了用于处理日期和时间的类和对应的方法,一般用于处理年、月、日、时、分、秒的统计和计算等需求,且这些类型的对象都是不可变的。最常用的是datetime.datetime,有些人误以为就一个模块,其实是datetime模块下的datetime类。

常量、类或方法名

注解

datetime.date

一个理想化的简单型日期,它假设当今的公历在过去和未来永远有效。属性包含: year, month, day。

datetime.time

一个独立于任何特定日期的理想化时间,它假设每一天都恰好等于 24*60*60 秒。这里没有“闰秒”的概念) 包含属性:hour、minute、second、microsecond 、tzinfo。

datetime.datetime

是日期和时间的结合,属性包含year、month、day、hour、minute、second、 microsecond、 tzinfo.表示日期时间

datetime.timedelta

表示两个 date 对象或者 time 对象,或者 datetime 对象之间的时间间隔,精确到微秒。

datetime.tzinfo

一个描述时区信息对象的抽象基类。用来给datetime和time类提供自定义的时间调整概念(例如处理时区和/或夏令时)。

datetime.timezone

一个实现了tzinfo抽象基类的子类,用于表示相对于世界标准时间(UTC)的偏移量。

datetime.MINYEAR

常量,表示年份允许的最小值为1

datetime.MAXYEAR

常量,表示年份允许的最大值为9999

书接上回,接着写

二、datetime.date类

1、date类介绍

作用:date类用来处理日期信息

语法:date类是datetime的内嵌类,实例化语法:datetime.date(year, month, day)

参数:year年份、month月份及day日期,所有参数都是必要的, 参数必须是在下面范围内的整数

MINYEAR <= year <= MAXYEAR

1 <= month <= 12

1 <= day<= 给定年月对应的天数

如果参数不在这些范围内,则抛出 ValueError 异常。

import datetimet = datetime.date(2019,8,26)print(type(t))print(t.day,t.month,t.year) # <class 'datetime.date'>26 8 2019

通过内置函数dir,可以查看date类的所有方法和属性

from datetime import date
print(dir(date))
['ctime', 'day', 'fromisocalendar', 'fromisoformat', 'fromordinal',
'fromtimestamp', 'isocalendar', 'isoformat', 'isoweekday', 'max',
'min', 'month', 'replace', 'resolution', 'strftime', 'timetuple',
'today', 'toordinal', 'weekday', 'year']

2、类方法

date.today()

作用:返回当前的本地日期,等价于date.fromtimestamp(time.time())。

from datetime import date date.today()datetime.date(2021, 7, 4)

date.fromtimestamp()

作用:返回对应于POSIX时间戳的当地时间,例如 time.time() 返回的就是时间戳。这可能引发 OverflowError,如果时间戳数值超出所在平台 C localtime() 函数的支持范围的话,并且会在 localtime() 出错时引发 OSError。通常该数值会被限制在 1970 年至 2038 年之间。请注意在时间戳概念包含闰秒的非 POSIX 系统上,闰秒会被 fromtimestamp() 所忽略。

在 3.3 版更改: 引发 OverflowError 而不是 ValueError,如果时间戳数值超出所在平台 C localtime() 函数的支持范围的话,并会在 localtime() 出错时引发 OSError 而不是 ValueError。

用法:date.fromtimestamp(timestamp)

from datetime import date
date.fromtimestamp(1339119900000/1e3).strftime('%Y-%m-%d %H:%M')
'2012-06-07 00:00'
date.fromtimestamp(1339120800000/1e3).strftime('%Y-%m-%d %H:%M')
'2012-06-07 00:00'

注意: unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。

date.fromordinal()

作用:返回对应于预期格列高利历序号的日期,其中公元 1 年 1 月 1 晶的序号为 1。

用法:date.fromordinal(ordinal)

from datetime import date
d = date.fromordinal(730920) # 730920th day after 1. 1. 0001
d
datetime.date(2002, 3, 11)

date.fromisoformat()

作用:返回一个对应于以 YYYY-MM-DD 格式给出的 date_string 的 date 对象

用法:date.fromisoformat(date_string)

from datetime import date
date.fromisoformat('2019-12-04')
datetime.date(2019, 12, 4)

这是 date.isoformat() 的逆操作。它只支持 YYYY-MM-DD 格式。更通用的要用strptime

d.isoformat()
'2002-03-11'

date.fromisocalendar()

作用:返回指定 year, week 和 day 所对应 ISO 历法日期的 date。这是函数 date.isocalendar() 的逆操作。

用法:date.fromisocalendar(year, week, day)

今年的42周第三天是10月20号

date.fromisocalendar(2021, 42, 3)
datetime.date(2021, 10, 20)

3、类属性

date.min

最小的日期 date(MINYEAR, 1, 1) 。

from datetime import date
date.min
datetime.date(1, 1, 1)

date.max

最大的日期 ,date(MAXYEAR, 12, 31)。

from datetime import date
date.max
datetime.date(9999, 12, 31)

date.resolution

两个日期对象的最小间隔,timedelta(days=1)。

from datetime import date
date.resolution
datetime.timedelta(days=1)

date.year

在 MINYEAR 和 MAXYEAR 之间,包含边界。

from datetime import date
d = date.today()#生成一个date对象
d
datetime.date(2021, 7, 5)
d.year
2021

date.month

1 至 12(含)

#接上述案例
d.month
7

date.day

返回1到指定年月的天数间的数字。

#接上述案例
d.day
5

3、实例方法

date.replace()

作用:返回一个具有同样值的日期,除非通过任何关键字参数给出了某些形参的新值。

用法:date.replace(year=self.year, month=self.month, day=self.day)

from datetime import date
d = date(2002, 12, 31)
d.replace(day=26)
datetime.date(2002, 12, 26)

date.timetuple()

作用:返回一个 time.struct_time,即 time.localtime() 所返回的类型。hours, minutes 和 seconds 值均为 0,且 DST 旗标值为 -1。

用法:date.timetuple(d)

d = date(2002, 12, 31)
date.timetuple(d)
time.struct_time(tm_year=2002, tm_mon=12, tm_mday=31,
tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=365,
tm_isdst=-1)

date.toordinal()

作用:返回日期的预期格列高利历序号,其中公元 1 年 1 月 1 日的序号为 1。对于任意 date 对象 d,date.fromordinal(d.toordinal()) == d。

d = date(1, 1, 1)
d.toordinal()
1
d = date(2002, 12, 31)
d.toordinal()
731215
date.fromordinal(d.toordinal())
datetime.date(2002, 12, 31)

date.weekday()

作用:返回一个整数代表星期几,星期一为0,星期天为6。

date(2002, 12, 4).weekday()
2

date.isoweekday()

作用:返回一个整数代表星期几,星期一为1,星期天为7。

date(2002, 12, 4).isoweekday()
3

date.isocalendar()

作用:返回一个由三部分组成的 named tuple 对象: year, week 和 weekday。

ISO 历法是一种被广泛使用的格列高利历。ISO 年由 52 或 53 个完整星期构成,每个星期开始于星期一结束于星期日。一个 ISO 年的第一个星期就是(格列高利)历法的一年中第一个包含星期四的星期。这被称为 1 号星期,这个星期四所在的 ISO 年与其所在的格列高利年相同。

例如,2004 年的第一天是星期四,因此 ISO 2004 年的第一个星期开始于 2003 年 12 月 29 日星期一,结束于 2004 年 1 月 4 日星期日.

from datetime import date
date(2003, 12, 29).isocalendar()
(2004, 1, 1) # 旧版本
datetime.IsoCalendarDate(year=2004, week=1, weekday=1) # 新版本
date(2004, 1, 4).isocalendar()
datetime.IsoCalendarDate(year=2004, week=1, weekday=7)

在 3.9 版更改: 结果由元组改为 named tuple。

date.isoformat()

作用:返回一个以 ISO 8601 格式 YYYY-MM-DD 来表示日期的字符串

用法:date.isoformat(d)

from datetime import date
date(2021, 10, 1).isoformat()
'2021-10-01'

这是 date.fromisoformat() 的逆操作。

date.__str__()

作用:对于日期对象 d, str(d) 等价于 d.isoformat() 。

用法:date.__str__(d)

from datetime import date
date(2021, 10, 1).__str__()
'2021-10-01'
str(date(2021, 10, 1))
'2021-10-01'

date.ctime()

作用:返回一个表示日期的字符串,在原生 C ctime() 函数 (time.ctime() 会发起调用该函数,但 date.ctime() 则不会) 遵循 C 标准的平台上。

from datetime import date
date(2021, 10, 1).ctime()
'Fri Oct  1 00:00:00 2021'

d.ctime() 等效于 time.ctime(time.mktime(d.timetuple()))

d=date(2021, 10, 1)
import time
time.ctime(time.mktime(d.timetuple()))
'Fri Oct  1 00:00:00 2021'

date.strftime()

作用:翻译下就是 str from time将给定格式的日期时间对象转换为字符串。日期时间对象=>字符串控制日期时间对象的输出格式,date、datetime、time对象都支持strftime(format) 方法,可用来创建由一个显式格式字符串所控制的表示时间的字符串。要获取格式指令的完整列表,查看文末列表。

用法:date.strftime(format)

掌握了这个方法,随心所以的转换日期格式

import datetime
dt=datetime.date(2021, 10, 1)#创建一个日期对象
dt.strftime("%Y-%m-%d")
'2021-10-01'
dt.strftime("%Y年%m月%d日")
'2021年10月01日'
dt.strftime("%Y//%m//%d")
'2021//10//01'
dt.strftime("%Y-%m-%d %H:%M")
'2021-10-01 00:00'
dt.strftime("%A, %d. %B %Y %I:%M%p")
'Friday, 01. October 2021 12:00AM'

date.__format__(format)

与 date.strftime() 相同。此方法使得为 date 对象指定以 格式化字符串字面值 表示的格式化字符串以及使用 str.format() 进行格式化成为可能。虽然不建议使用这个装逼,但是遇到别人装逼的时候我们得知道。要获取格式指令的完整列表,请看文末附表

import datetimedt=datetime.date(2021, 10, 1)
#创建一个日期对象dt.__format__("%Y年%m月%d日")'2021年10月01日'

4、支持的运算

date2 = date1 + timedelta

date2 等于从 date1 减去 timedelta.days 天。(1)

date2 = date1 - timedelta

计算 date2 的值使得 date2 + timedelta == date1。(2)

timedelta = date1 - date2

(3)

date1 < date2

如果 date1 的时间在 date2 之前则认为 date1 小于 date2 。(4)

三、datetime.time类

1、time类概述

作用:一个 time 对象代表某日的(本地)时间,它独立于任何特定日期,并可通过 tzinfo 对象来调整。

语 法:

datetime.time(hour=0, minute=0, second=0, microsecond=0,
tzinfo=None, *, fold=0)

参 数:

所有参数都是可选的,tzinfo 可以是 None,或者是一个 tzinfo 子类的实例。 其余的参数必须是在下面范围内的整数:

  • 0 <= hour < 24

  • 0 <= minute < 60

  • 0 <= second < 60

  • 0 <= microsecond < 1000000

  • fold in [0, 1]

如果给出一个此范围以外的参数,则会引发 ValueError。 所有参数值默认为 0,只有 tzinfo 默认为 None。

通过内置函数dir,可以查看time类的所有方法和属性

from datetime import time
print(dir(time))
['dst', 'fold', 'fromisoformat', 'hour', 'isoformat', 'max',
'microsecond', 'min', 'minute', 'replace', 'resolution',
'second', 'strftime', 'tzinfo', 'tzname', 'utcoffset']

2、time类属性

time.min

早最的可表示 time, time(0, 0, 0, 0)。

from datetime import time
time.min
datetime.time(0, 0)

time.max

最晚的可表示 time, time(23, 59, 59, 999999)。

from datetime import time
time.max
datetime.time(23, 59, 59, 999999)

time.resolution

两个不相等的 time 对象之间可能的最小间隔,timedelta(microseconds=1),但是请注意 time 对象并不支持算术运算。

from datetime import time
time.resolution
datetime.timedelta(microseconds=1)

3、time类实例属性

time.hour

取值范围是 range(24)。

from datetime import time
t = time(hour=12, minute=34, second=56, microsecond=123456)
t.hour
12

time.minute

取值范围是 range(60)。

t.minute
34

time.second

取值范围是 range(60)。

t.second
56

time.microsecond

取值范围是 range(1000000)。

t.microsecond
123456

time.tzinfo

作为 tzinfo 参数被传给 time 构造器的对象,如果没有传入值则为 None。

t.tzinfo

time.fold

取值范围是 [0, 1]。 用于在重复的时间段中消除边界时间歧义。 (当夏令时结束时回拨时钟或由于政治原因导致当明时区的 UTC 时差减少就会出现重复的时间段。) 取值 0 (1) 表示两个时刻早于(晚于)所代表的同一边界时间。

t.fold
0

4、time类实例方法

time.replace()

作用:返回一个具有同样属性值的 time,除非通过任何关键字参数指定了某些属性值。

语法:time.replace(hour=self.hour, minute=self.minute, second=self.second,

microsecond=self.microsecond, tzinfo=self.tzinfo, *, fold=0)

from datetime import time
t = time(hour=12, minute=34, second=56, microsecond=123456)
t.replace(hour=23, minute=12,)
datetime.time(23, 12, 56, 123456)

time.isoformat()

作用:返回表示为 ISO 8601 格式之一的时间字符串

语法:time.isoformat(timespec='auto')

from datetime import time
t = time(hour=12, minute=34, second=56, microsecond=123456)
t.isoformat()
'12:34:56.123456't.isoformat(timespec='minutes')
'12:34'dt = time(hour=12, minute=34, second=56, microsecond=0)
dt.isoformat(timespec='microseconds')
'12:34:56.000000'dt.isoformat(timespec='auto')
'12:34:56'

time.fromisoformat()

作用:返回对应于 time.isoformat() 所提供的某种 time_string 格式的 time。 特别地,此函数支持以下格式的字符串:HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]

语法:time.fromisoformat(time_string)

time.fromisoformat('04:23:01')
datetime.time(4, 23, 1)time.fromisoformat('04:23:01.000384')
datetime.time(4, 23, 1, 384)time.fromisoformat('04:23:01+04:00')
datetime.time(4,23,1, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))

time.__str__()

作用:对于时间对象 t, str(t) 等价于 t.isoformat()

语法:time.__str__(t)

from datetime import time
t = time(hour=12, minute=34, second=56, microsecond=123456)
time.__str__(t)
'12:34:56.123456'
str(t)
'12:34:56.123456'

time.strftime()

作用:时间->字符串,返回一个由显式格式字符串所指明的代表时间的字符串

语法:time.strftime(format)

from datetime import time
t = time(hour=12, minute=3, second=56)
t.strftime('%H:%M:%S')
#用:分隔
'12:03:56'
#用%分隔
t.strftime('%H%%%M%%%S')
'12%03%56'

time.__format__()

作用:与 time.strftime() 相同

语法:time.__format__(format)

from datetime import time
t = time(hour=12, minute=3, second=56)
t.__format__('%H:%M:%S')
'12:03:56'
t.__format__('%H%%%M%%%S')
'12%03%56'

time.utcoffset()

作用:如果 tzinfo 为 None,则返回 None,否则返回 self.tzinfo.utcoffset(None),并且在后者不返回 None 或一个幅度小于一天的 a timedelta 对象时将引发异常。

time.dst()

作用:如果 tzinfo 为 None,则返回 None,否则返回 self.tzinfo.dst(None),并且在后者不返回 None 或者一个幅度小于一天的 timedelta 对象时将引发异常。

time.tzname()

作用:如果 tzinfo 为 None,则返回 None,否则返回 self.tzinfo.tzname(None),如果后者不返回 None 或者一个字符串对象则将引发异常。

from datetime import time, tzinfo, timedelta
class TZ1(tzinfo):def utcoffset(self, dt):return timedelta(hours=1)def dst(self, dt):return timedelta(0)def tzname(self,dt):return "+01:00"def  __repr__(self):return f"{self.__class__.__name__}()"t = time(12, 10, 30, tzinfo=TZ1())
t
datetime.time(12, 10, 30, tzinfo=TZ1())
t.isoformat()
'12:10:30+01:00'
t.dst()
datetime.timedelta(0)
t.tzname()
'+01:00'
t.strftime("%H:%M:%S %Z")
'12:10:30 +01:00'
'The {} is {:%H:%M}.'.format("time", t)
'The time is 12:10.'

四、datetime.datetime类

1、datetime概述

作用:date类可以同时获得日期和时间信息,datetime 对象是包含来自 date 对象和 time 对象的所有信息的单一对象。与 date 对象一样,datetime 假定当前的格列高利历向前后两个方向无限延伸;与 time 对象一样,datetime 假定每一天恰好有 3600*24 秒。

语法:

datetime.datetime(year, month, day, hour=0, minute=0, second=0,
microsecond=0, tzinfo=None, *, fold=0)

参数:year, month 和 day 参数是必须的。 tzinfo 可以是 None 或者是一个 tzinfo 子类的实例。 其余的参数必须是在下面范围内的整数:

  • MINYEAR <= year <= MAXYEAR,

  • 1 <= month <= 12,

  • 1 <= day <= 指定年月的天数,

  • 0 <= hour < 24,

  • 0 <= minute < 60,

  • 0 <= second < 60,

  • 0 <= microsecond < 1000000,

  • fold in [0, 1].

如果参数不在这些范围内,则抛出 ValueError 异常。

注意:microsecond-微秒,百万分之一秒

datetime类是date和time的结合体,包括date与time的所有信息,date和time类中具有的方法和属性,datetime类都具有。我们可以使用内置函数dir查看该模块支持的方法

print(dir(datetime.datetime))
[ 'astimezone', 'combine', 'ctime', 'date', 'day', 'dst', 'fold',
'fromisoformat', 'fromordinal', 'fromtimestamp', 'hour',
'isocalendar', 'isoformat', 'isoweekday', 'max', 'microsecond',
'min', 'minute', 'month', 'now', 'replace', 'resolution', 'second',
'strftime', 'strptime', 'time', 'timestamp', 'timetuple', 'timetz',
'today', 'toordinal', 'tzinfo', 'tzname', 'utcfromtimestamp', 'utcnow',
'utcoffset', 'utctimetuple', 'weekday', 'year']

2、datetime类方法

datetime.today()

作用:获取今天的时间,返回datetime对象,其中 tzinfo 为 None。 此方法的功能等价于 now(),但是不带 tz 形参。

语法:datetime.datetime.today(tz=None )

from datetime import datetime
datetime.today()
datetime.datetime(2021, 7, 5, 17, 58, 21, 359135)

注:359135,microsecond-微秒,百万分之一秒

datetime.now()

作用:返回当前时间,返回datetime对象。

语法:datetime.datetime.now(tz=None )

from datetime import datetime
#获取现在时间
datetime.now()
datetime.datetime(2021, 6, 27, 21, 59, 53, 950783)
#调整下格式
datetime.now().strftime('%Y-%m-%d %H:%M:%S')
'2021-06-27 22:01:49'

datetime.utcnow()

作用:返回表示当前 UTC 时间的 date 和 time,其中 tzinfo 为 None。

语法:datetime.utcnow()

from datetime import datetime
datetime.utcnow()
datetime.datetime(2021, 7, 6, 2, 46, 7, 229768)
datetime.now()
datetime.datetime(2021, 7, 6, 10, 46, 3, 67817)

可以看到,now()与相差了差不多8小时

datetime.fromtimestamp()

作用:时间戳表示为本地时间的简单日期时间对象, 如果可选参数 tz 为 None 或未指定,时间戳会被转换为所在平台的本地日期和时间,返回的 datetime 对象将为天真型。

语法:datetime.datetime.fromtimestamp(timestamp, tz=None)

import time
import datetime
tt = time.time()
tt
1625542045.2471695
datetime.datetime.fromtimestamp(tt)
datetime.datetime(2021, 7, 6, 11, 27, 25, 247169)
#取整数后,精确到秒,否则精确到微秒,一微秒=百万分之一秒
datetime.datetime.fromtimestamp(1625542045)
datetime.datetime(2021, 7, 6, 11, 27, 25)
#例如,使用日期2008-12-27午夜UTC(自纪元起40*356*86400秒)
datetime.datetime.fromtimestamp(40 * 356 * 86400)
datetime.datetime(2008, 12, 27, 1, 0)

datetime.utcfromtimestamp()

作用:时间戳表示为本地时间的UTC日期时间对象

语法:datetime.datetime.utcfromtimestamp(timestamp)

import datetime
#获取本地当前时间
dt=datetime.datetime.now()
#获取时间戳
dt.timestamp()
1625549035.048533
datetime.datetime.utcfromtimestamp(dt.timestamp())
datetime.datetime(2021, 7, 6, 5, 23, 55, 48533)

datetime.fromordinal()

作用:返回对应于预期格列高利历序号的 datetime,其中公元 1 年 1 月 1 日的序号为 1。 除非 1 <= ordinal <= datetime.max.toordinal() 否则会引发 ValueError。 结果的 hour, minute, second 和 microsecond 值均为 0,并且 tzinfo 值为 None。

语法:datetime.fromordinal(ordinal)

datetime.datetime.fromordinal(730920)
datetime.datetime(2002, 3, 11, 0, 0)

datetime.combine()

作用:返回一个date对象和一个time对象合成的date对象, 如果提供了 tzinfo 参数,其值会被用来设置结果的 tzinfo 属性,否则将使用 time 参数的 tzinfo 属性。

语法:datetime.combine(date, time, tzinfo=self.tzinfo)

d = date(2005, 7, 14)
t = time(12, 30)
datetime.combine(d, t)
datetime.datetime(2005, 7, 14, 12, 30)

对于任意 datetime 对象 d,d = datetime.combine(d.date(), d.time(), d.tzinfo)。 如果 date 是一个 datetime 对象,它的时间部分和 tzinfo 属性会被忽略。

datetime.fromisoformat()

作用:返回一个对应于 date.isoformat() 和 datetime.isoformat() 所提供的某一种 date_string 的 datetime 对象。 特别地,此函数支持以下格式的字符串:YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]],其中 * 可以匹配任意的单个字符。

语法:datetime.fromisoformat(date_string)

from datetime import datetime
datetime.fromisoformat('2011-11-04')
datetime.datetime(2011, 11, 4, 0, 0)datetime.fromisoformat('2011-11-04T00:05:23')
datetime.datetime(2011, 11, 4, 0, 5, 23)datetime.fromisoformat('2011-11-04 00:05:23.283')
datetime.datetime(2011, 11, 4, 0, 5, 23, 283000)datetime.fromisoformat('2011-11-04 00:05:23.283+00:00')
datetime.datetime(2011, 11, 4, 0, 5, 23, 283000, tzinfo=datetime.timezone.utc)datetime.fromisoformat('2011-11-04T00:05:23+04:00')
datetime.datetime(2011, 11, 4, 0, 5, 23,
tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))

datetime.fromisocalendar()

作用:返回以 year, week 和 day 值指明的 ISO 历法日期所对应的 datetime。 该datetime 对象的非日期部分将使用其标准默认值来填充。 这是函数 datetime.isocalendar() 的逆操作。

语法:datetime.fromisocalendar(year, week, day)

from datetime import datetime
datetime.fromisocalendar(2021, 10, 1)
datetime.datetime(2021, 3, 8, 0, 0)

datetime.strptime()

作用:按照特定时间格式将字符串转换(解析)为时间类型。返回一个由显式格式字符串所指明的代表时间的字符串。 要获取格式指令的完整列表,请参阅 strftime() 和 strptime() 的行为。

语法:datetime.strptime(date_string, format)

dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
dt
datetime.datetime(2006, 11, 21, 16, 30)

3、类属性

datetime.min

最早的可表示 datetime,datetime(MINYEAR, 1, 1, tzinfo=None)。

from datetime import datetime
datetime.min
datetime.datetime(1, 1, 1, 0, 0)

datetime.max

最晚的可表示 datetime,

datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None)。
from datetime import datetime
datetime.max
datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)

datetime.resolution

两个不相等的 datetime 对象之间可能的最小间隔,timedelta(microseconds=1)。

from datetime import datetime
datetime.resolution
datetime.timedelta(microseconds=1)

4、实例属性-只读

datetime.year

在 MINYEAR 和 MAXYEAR 之间,包含边界。

from datetime import datetime
datetime(2021,5,20,13,14,0,0).year
2021

datetime.month

1 至 12(含)

from datetime import datetime
datetime(2021,5,20,13,14,0,0).month
5

datetime.day

返回1到指定年月的天数间的数字。

from datetime import datetime
datetime(2021,5,20,13,14,0,0).day
20

datetime.hour

取值范围是 range(24)。

from datetime import datetime
datetime(2021,5,20,13,14,0,0).hour
13

datetime.minute

取值范围是 range(60)。

from datetime import datetime
datetime(2021,5,20,13,14,0,0).minute
14

datetime.second

取值范围是 range(60)。

from datetime import datetime
datetime(2021,5,20,13,14,0,0).second
0

datetime.microsecond

取值范围是 range(1000000)。

from datetime import datetime
datetime(2021,5,20,13,14,0,0).microsecond
0

datetime.tzinfo

作为 tzinfo 参数被传给 datetime 构造器的对象,如果没有传入值则为 None。

from datetime import datetime
datetime(2021,5,20,13,14,0,0).fold

datetime.fold

取值范围是 [0, 1]。 用于在重复的时间段中消除边界时间歧义。 (当夏令时结束时回拨时钟或由于政治原因导致当明时区的 UTC 时差减少就会出现重复的时间段。) 取值 0 (1) 表示两个时刻早于(晚于)所代表的同一边界时间。

from datetime import datetime
datetime(2021,5,20,13,14,0,0).fold
0

5、datetime实例方法

datetime.date()

作用:返回具有同样 year, month 和 day 值的 date 对象。

用法:datetime.date()

datetime(2021,5,20,13,14,0,0).date()
datetime.date(2021, 5, 20)

datetime.time()

作用:返回具有同样 hour, minute, second, microsecond 和 fold 值的 time 对象。 tzinfo 值为 None。 另请参见 timetz() 方法。

用法:datetime.time()

datetime(2021,5,20,13,14,0,0).time()
datetime.time(13, 14)

datetime.timetz()

作用:返回具有同样 hour, minute, second, microsecond, fold 和 tzinfo 属性性的 time 对象。 另请参见 time() 方法。

用法:datetime.timetz()

datetime(2021,5,20,13,14,0,0).timetz()
datetime.time(13, 14)

datetime.replace()

作用:返回一个具有同样属性值的 datetime,除非通过任何关键字参数为某些属性指定了新值。 请注意可以通过指定 tzinfo=None 来从一个感知型 datetime 创建一个简单型 datetime 而不必转换日期和时间数据。

用法:datetime.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)

from datetime import datetime
datetime(2021,5,20,13,14,0,0).replace(year=2035, month=12)
datetime.datetime(2035, 12, 20, 13, 14)

datetime.astimezone()

作用:返回一个具有新的 tzinfo 属性 tz 的 datetime 对象,并会调整日期和时间数据使得结果对应的 UTC 时间与 self 相同,但为 tz 时区的本地时间。

用法:datetime.astimezone(tz=None)

def astimezone(self, tz):if self.tzinfo is tz:return self# Convert self to UTC, and attach the new time zone object.utc = (self - self.utcoffset()).replace(tzinfo=tz)# Convert from UTC to tz's local time.return tz.fromutc(utc)

datetime.timetuple()

返回一个 time.struct_time,即 time.localtime() 所返回的类型。

from datetime import datetime
datetime(2021,5,20,13,14,0,0).timetuple()
time.struct_time(tm_year=2021, tm_mon=5, tm_mday=20, tm_hour=13,
tm_min=14, tm_sec=0, tm_wday=3, tm_yday=140, tm_isdst=-1)

datetime.utctimetuple()

作用:如果 datetime 实例 d 为简单型,这类似于 d.timetuple(),不同之处在于 tm_isdst 会强制设为 0,无论 d.dst() 返回什么结果。 DST 对于 UTC 时间永远无效。返回UTC时间元组

语法:datetime对象.utctimetuple()

from datetime import datetime
datetime(2021,5,20,13,14,0,0).utctimetuple()
time.struct_time(tm_year=2021, tm_mon=5, tm_mday=20, tm_hour=13, tm_min=14, tm_sec=0, tm_wday=3, tm_yday=140, tm_isdst=0)

datetime.toordinal()

作用:返回日期的预期格列高利历序号。 与 self.date().toordinal() 相同。

用法:datetime.toordinal()

datetime(2021, 5, 4).toordinal()
737914

datetime.timestamp()

作用:返回对应于 datetime 实例的 POSIX 时间戳。 此返回值是与 time.time() 返回值类似的 float 对象。

用法:datetime.timestamp()

from datetime import datetime
datetime(2021, 5, 4).timestamp()
1620057600.0

datetime.weekday()

作用:返回一个整数代表星期几,星期一为 0,星期天为 6。 相当于 self.date().weekday()。 另请参阅 isoweekday()。

用法:datetime.weekday()

import datetime
datetime.datetime(2021, 5, 4).weekday()
1

datetime.isoweekday()

作用:返回一个整数代表星期几,星期一为 1,星期天为 7。 相当于 self.date().isoweekday()。 另请参阅 weekday(), isocalendar()。

用法:datetime.isoweekday()

import datetime
datetime.datetime(2021, 5, 4).isoweekday()
2

datetime.isocalendar()

作用:返回一个由三部分组成的元组: year, week 和 weekday,哪一年、第几周和、周几,等同于 self.date().isocalendar()。

用法:datetime.isocalendar()

import datetime
dt = datetime.datetime.now()
print(dt)
2021-07-06 14:22:35.920877
dt.isocalendar()
(2021, 27, 2)

datetime.isoformat()

作用:返回一个以 ISO 8601 格式表示的日期和时间字符串

用法:datetime.isoformat(sep='T', timespec='auto')

from datetime import datetime, timezone
datetime(2019, 5, 18, 15, 17, 8, 132263).isoformat()
'2019-05-18T15:17:08.132263'
datetime(2019, 5, 18, 15, 17, tzinfo=timezone.utc).isoformat()
'2019-05-18T15:17:00+00:00'

datetime.__str__()

作用:对于 datetime 实例 d,str(d) 等价于 d.isoformat(' ')。

语法:datetime.__str__(d)

from datetime import datetime
# __str__
datetime.__str__(datetime(2019, 5, 18, 15, 17, 8, 132263))
'2019-05-18 15:17:08.132263'
# str
str(datetime(2019, 5, 18, 15, 17, 8, 132263))
'2019-05-18 15:17:08.132263'

datetime.ctime()

作用:返回一个表示日期和时间的字符串,输出字符串将 并不 包括时区信息,无论输入的是感知型还是简单型。

用法:datetime.ctime()

from datetime import datetime
datetime(2002, 12, 4, 20, 30, 40).ctime()
'Wed Dec  4 20:30:40 2002'
#d.ctime() 等效于:
time.ctime(time.mktime(d.timetuple()))

在原生 C ctime() 函数 (time.ctime() 会发起调用该函数,但 datetime.ctime() 则不会) 遵循 C 标准的平台上。

datetime.strftime()

作用:将给定格式的日期时间对象转换为字符串。日期时间对象=>字符串,控制日期时间对象的输出格式,date、datetime、time对象都支持strftime(format) 方法,可用来创建由一个显式格式字符串所控制的表示时间的字符串。要获取格式指令的完整列表,查看文末列表。

用法:datetime.strftime(format)

import datetime
dt=datetime.datetime(2006, 11, 21, 16, 30)
dt.strftime("%Y-%m-%d %H:%M")
'2006-11-21 16:30'dt.strftime("%Y-%m-%d")
'2006-11-21'dt.strftime("%A, %d. %B %Y %I:%M%p")
'Tuesday, 21. November 2006 04:30PM'

对比:

strftime: 将给定格式的日期时间对象转换为字符串。日期时间对象=>字符串,控制输出格式

strptime:将字符串解析为给定格式的日期时间对象。字符串=>日期时间对象,解析字符串

strftime

strptime

用法

根据给定的格式将对日期时间象转换为字符串

将字符串解析为给定相应格式的datetime 对象

类型

实例方法

类方法

方法

date; datetime; time

datetime

用法

strftime(format)

strptime(date_string, format)

示例

datetime.datetime(2006, 11, 21, 16, 30) =>  '2006-11-21 16:30'

"21/11/06 16:30"  => datetime.datetime(2006, 11, 21, 16, 30)

datetime.__format__()

作用:与 datetime.strftime() 相同。

语法:datetime.__format__(format)

import datetime
dt=datetime.datetime(2006, 11, 21, 16, 30)
dt.__format__("%Y-%m-%d %H:%M")
'2006-11-21 16:30'

关联阅读:Python中的时间函数strftime与strptime对比

···  END  ···

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载黄海广老师《机器学习课程》视频课黄海广老师《机器学习课程》711页完整版课件

本站qq群851320808,加入微信群请扫码:

【Python】随心所欲地用Python处理时间相关推荐

  1. 上海python培训班-上海哪家python培训班比较靠谱?

    随着日渐增加的人工成本,人工智能的出现帮助很多企业节省大量的人工成本和时间成本,可以说在未来人工智能时代,Python语言可以发挥相当大的作用,目前正是国内Python人才的短缺时期,现在学习pyth ...

  2. python基础入门视频-Python基础入门视频课程——笔记

    Python基础,主讲:汤小洋 一.Python简介 1. Python是什么? ​ Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum(龟叔)于1989年 ...

  3. 为什么要学python语言、学完有什么好处_学编程为什么首选Python?学完Python的优势有哪些?...

    原标题:学编程为什么首选Python?学完Python的优势有哪些? Python 是一门更注重可读性和效率的语言,尤其是相较于 Java,PHP 以及 C++ 这样的语言,它的这两个优势让其在开发者 ...

  4. python常用代码大全-Python常用库大全,看看有没有你需要的

    环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...

  5. python常用代码大全-Python常用库大全及简要说明

    环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具.官网 pyenv:简单的 Python 版本管理工具.官网 Vex:可以在虚拟环境中执行命令.官网 v ...

  6. python爬虫怎么赚钱-python爬虫怎么赚钱

    python爬虫是什么意思 网络爬虫的工作原理 网络爬虫,即Web Spider,是一个很形象的名字.把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来 ...

  7. python基础系列教程——python基础语法全解

    点击此处​​​​​​​ python教程全解 了解python 1.  了解Python Python是一种解释型(这意味着开发过程中没有了编译这个环节).面向对象(支持面向对象的风格或代码封装在对象 ...

  8. 编程入门先学python好不好,学python用什么软件编程

    学python有什么用处呢? Python的应用场景比较广泛,目前广泛应用于人工智能.云计算开发.大数据开发等领域,所以你只需要对Python更加深一点点的了解,你就具备更宽泛的工作角色技能. Pyt ...

  9. 可爱的python测试开发库(python测试开发工具库汇总)

    2019独角兽企业重金招聘Python工程师标准>>> 欢迎转载,转载请注明来源: github地址 谢谢点赞 本文地址 Python测试开发库 参考资料 https://githu ...

  10. python常用函数库-Python常用库大全及简要说明

    环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具.官网 pyenv:简单的 Python 版本管理工具.官网 Vex:可以在虚拟环境中执行命令.官网 v ...

最新文章

  1. 【译】Persistent reverse (NAT bypassing) SSH tunnel access with autossh
  2. oracle删除定义变量,Oracle存储过程,临时表的创建、删除,变量的定义和使用
  3. java swing 控件拖动_java swing中实现拖拽功能示例
  4. 2019 ICPC World Finals Problem B. Beautiful Bridges
  5. 企业实战_04_MyCat常用配置文件详解
  6. python删除列表一段元素_Python基础--list列表删除元素
  7. 华为库存至少够缓冲一年;张朝阳质疑 5G 微波危害;苹果iOS 13不受支持机型曝光 | 极客头条...
  8. 乌镇互联网大会 | 王恩东院士谈人工智能:计算力就是生产力
  9. jQuery AJAX 与 jQuery 事件
  10. selenium 点击后没反应未报错_Selenium代码迁移时会出现哪些问题?(附解决方案)...
  11. RCP中如何使用代码安装、运行plugins
  12. git version可以卸载吗_「玩转Git命令」作为代码奴,该安装Git啦
  13. JavaEye中导入Csdn博客问题
  14. Photoshop在线版图片处理工具
  15. 网站pc端和手机端视频的处理
  16. 中公教育计算机老师笔试面试题,2020下高中信息技术教师资格证面试试题及答案【1月9日下午】...
  17. sulley测试环境搭建的相关总结
  18. VR医疗平台Osso VR完成6600万美元C轮融资
  19. 计算机性能指标ppt,计算机网络—评价网络的性能指标知识讲解.ppt
  20. 扶贫工作-结对帮扶公示牌 自动化填写

热门文章

  1. 自定义控件-侧边菜单SlidingMenu(滑动菜单)
  2. SQL大数据查询优化
  3. StringWriter/PrintWriter在Java输出异常信息中的作用
  4. 课堂练习——最大联通之数组
  5. iOS用户设计指南-特别说明
  6. 用stream将dgv中的数据导出到word或excel中小例子
  7. 《微软文档管理解决方案2007》之一:安装部署 - [SharePoint Server]
  8. The Road to SDN: An Intellectual History of Programmable Networks
  9. 上传文件、上传按钮、Form组件上传文件
  10. oracle怎么捕获表上的DML语句(不包括select)语句)