timezone 类是 tzinfo 的子类,它的每个实例代表一个由与 UTC 的固定偏移量定义的时区。 请注意,此类对象不能用于表示在一年中的不同日子使用不同偏移量或对民用时间进行历史更改的位置的时区信息。

class datetime.timezone(offsetname=None)
所述偏移参数必须被指定为timedelta 代表的本地时间和UTC之间的差对象。它必须严格地介于-timedelta(hours=24)和 之间timedelta(hours=24),否则就会ValueError被提升。

名称参数是可选。如果指定,则它必须是将用作datetime.tzname()方法返回的值的字符串。

版本3.2中的新功能。

版本3.7中已更改: UTC偏移量不限于整数分钟。

timezone.utcoffset(dt)
返回timezone构造实例时指定的固定值。该DT参数将被忽略。返回值是一个timedelta等于本地时间和UTC之间差异的 实例。

版本3.7中已更改: UTC偏移量不限于整数分钟。

timezone.tzname(dt)
返回timezone构造实例时指定的固定值。如果名称在构造函数中没有设置,该名称由返回tzname(dt)从的值生成 offset如下。如果偏移timedelta(0),名字是“UTC”,否则它是一个字符串“UTC±HH:MM”,其中±是符号offset,HH和MM是两个数字offset.hours和 offset.minutes分别。

版本3.6中已更改:生成的名称offset=timedelta(0)现在为“UTC”,而不是“UTC + 00:00”。

timezone.dst(dt)
总是回来None
timezone.fromutc(dt)
返回 dt + 偏移量。 dt 参数必须是可感知的日期时间实例,且 tzinfo 设置为 self。

类属性:

timezone.utc
UTC时区,timezone(timedelta(0))

 

strftime()strptime()行为

date、datetime 和 time 对象都支持 strftime(format) 方法,以在显式格式字符串的控制下创建表示时间的字符串。从广义上讲,d.strftime(fmt) 的作用类似于时间模块的 time.strftime(fmt, d.timetuple()),尽管并非所有对象都支持 timetuple() 方法。

相反,datetime.strptime() 类方法从表示日期和时间的字符串和相应的格式字符串创建日期时间对象。 datetime.strptime(date_string, format) 等价于 datetime(*(time.strptime(date_string, format)[0:6])),除非格式包含亚秒分量或时区偏移信息,这些在 datetime 中受支持.strptime 但被 time.strptime 丢弃。

对于时间对象,不应使用年、月和日的格式代码,因为时间对象没有这样的值。如果仍然使用它们,则用 1900 代替年份,用 1 代替月份和日期。

对于日期对象,不应使用小时、分钟、秒和微秒的格式代码,因为日期对象没有此类值。如果仍然使用它们,则用 0 代替它们。

对于 datetime.strptime() 类方法,默认值为 1900-01-01T00:00:00.000:格式字符串中未指定的任何组件都将从默认值中提取。 2

支持的全套格式代码因平台而异,因为 Python 调用平台 C 库的 strftime() 函数,并且平台变化很常见。要查看您的平台支持的完整格式代码集,请参阅 strftime(3) 文档。

出于同样的原因,处理包含无法在当前语言环境的字符集中表示的 Unicode 代码点的格式字符串也取决于平台。在某些平台上,这样的代码点在输出中完好无损,而在其他平台上,strftime 可能会引发 UnicodeError 或返回空字符串。

以下是 C 标准(1989 版)所需的所有格式代码的列表,这些代码适用于具有标准 C 实现的所有平台。请注意,C 标准的 1999 版添加了额外的格式代码。

指示 含义 笔记
%a 工作日作为语言环境的缩写名称。
太阳,周一,……,周六(en_US);
所以,Mo,…,Sa(de_DE)
(1)
%A 平日作为语言环境的全名。
星期日,星期一,……,星期六(en_US);
Sonntag,Montag,……,Samstag(de_DE)
(1)
%w 工作日为十进制数,其中0表示星期日,6表示星期六。 0,1,…,6
%d 作为零填充十进制数的月中的某一天。 01,02,…,31
%b 月份为区域设置的缩写名称。
Jan,Feb,…,Dec(en_US);
Jan,Feb,…,Dez(de_DE)
(1)
%B 月份为区域设置的全名。
1月,2月,…,12月(en_US);
Januar,Februar,…,Dezember(de_DE)
(1)
%m 月份为零填充十进制数。 01,02,…,12
%y 没有世纪的年份为零填充十进制数。 00,01,…,99
%Y 年份以世纪为十进制数。 0001,0002,…,2013,2014,…,9998,9999 (2)
%H 小时(24小时制)作为零填充十进制数。 00,01,…,23
%I 小时(12小时制)作为零填充十进制数。 01,02,…,12
%p Locale相当于AM或PM。
AM,PM(en_US);
上午,下午(de_DE)
(1),(3)
%M 分钟为零填充十进制数。 00,01,…,59
%S 其次是零填充十进制数。 00,01,…,59 (4)
%f Microsecond为十进制数,左侧为零填充。 000000,000001,…,999999 (5)
%z UTC偏移量的形式为±HHMM [SS [.ffffff]](如果对象是幼稚的,则为空字符串)。 (空),+ 0000,-0400,+ 1030,+ 063415,-030712.345216 (6)
%Z 时区名称(如果对象是天真的,则为空字符串)。 (空),UTC,EST,CST
%j 一年中的一天作为零填充十进制数。 001,002,…,366
%U 作为零填充十进制数的一年中的周数(星期日作为一周的第一天)。在第一个星期日之前的新年中的所有日子都被认为是在第0周。 00,01,…,53 (7)
%W 一年中的周数(星期一作为一周的第一天)作为十进制数。在第一个星期一之前的新年中的所有日子被认为是在第0周。 00,01,…,53 (7)
%c Locale的适当日期和时间表示。
1988年8月16日星期二21:30:00(en_US);
Di 16 Aug 21:30:00 1988(de_DE)
(1)
%x Locale的适当日期表示。
08/16/88(无);
1988年8月16日(en_US);
19.08.1988(de_DE)
(1)
%X Locale的适当时间表示。
21:30:00(zh_);
21:30:00(de_DE)
(1)
%% 文字'%'字符。

为方便起见,包括了C89标准不要求的其他几个指令。这些参数均对应于ISO 8601日期值。与strftime() 方法一起使用时,这些可能并非在所有平台上都可用。ISO 8601年和ISO 8601周指令不能与上述年份和周数指令互换。strptime()使用不完整或模糊的ISO 8601指令调用会引发一个问题ValueError

指示 含义 笔记
%G ISO 8601年代表包含ISO周(%V)大部分年份的世纪。 0001,0002,…,2013,2014,…,9998,9999 (8)
%u 工作日的ISO 8601为十进制数,其中1为星期一。 1,2,…,7
%V ISO 8601周作为十进制数,星期一作为一周的第一天。第01周是包含1月4日的一周。 01,02,…,53 (8)

新的3.6版:添加%G%u%V

笔记:

  1. 由于格式取决于当前区域设置,因此在对输出值进行假设时应小心。字段顺序会有所不同(例如,“月/日/年”与“日/月/年”),输出可能包含使用区域设置的默认编码编码的Unicode字符(例如,如果当前区域设置为ja_JP,则为默认值编码可以是中的任一项eucJPSJISutf-8;使用locale.getlocale() 以确定当前区域的编码)。

  2. strptime()方法可以在完整[1,9999]范围内解析多年,但是年<1000必须填零到4位宽。

    在3.2版中更改:在以前的版本中,strftime()方法限制为年> = 1900。

    在版本3.3中更改:在版本3.2中,strftime()方法被限制为年> = 1000。

  3. strptime()方法一起使用时,%p如果%I指令用于解析小时,则该指令仅影响输出小时字段。

  4. time模块不同,该datetime模块不支持闰秒。

  5. 当与该strptime()方法一起使用时,该%f指令接受一到六位数字和右边的零焊盘。 %f是C标准中格式字符集的扩展(但在datetime对象中单独实现,因此始终可用)。

  6. 对于幼稚目的,%z%Z格式代码由空字符串替换。

    对于一个知道的对象:

    %z

    utcoffset()转换为±HHMM [SS [.ffffff]]形式的字符串,其中HH是2位数字符串,给出UTC偏移小时数,MM是2位数字符串,给出UTC偏移分钟数,SS是一个2位数字符串,给出UTC偏移秒数,ffffff是一个6位数字符串,给出UTC偏移微秒数。当偏移是整数秒时,省略fffff部分,当偏移是整数分钟时,省略ffffff和SS部分。例如,如果 utcoffset()返回,则替换为字符串。timedelta(hours=-3,minutes=-30)%z'-0330'

    版本3.7中已更改: UTC偏移量不限于整数分钟。

    版本3.7中更改:%z指令提供给 strptime()方法时,UTC偏移量可以在小时,分钟和秒之间使用冒号作为分隔符。例如,'+01:00:00'将被解析为一小时的偏移量。另外,提供'Z'是相同的'+00:00'

    %Z

    如果tzname()返回None%Z则替换为空字符串。否则%Z由返回值替换,返回值必须是字符串。

    在3.2版中更改:%zstrptime()方法提供指令时,datetime将生成一个知道对象。该tzinfo结果将被设置为一个timezone实例。

  7. 当与使用strptime()方法,%U以及%W一周的一天,历年(当计算仅使用%Y指定)。

  8. %U和类似%W%V仅用于在星期几和ISO年份(%G)在strptime()格式字符串中指定时的计算 。另请注意,%G并且%Y不可互换。

脚注

[1] 如果,也就是说,我们忽略了相对论的影响