logo BT编程语言
首页动态文档关于登录更新记录
BT编程语言文档

date日期

在BT语言中,date是一个内置的标准库,用于处理日期和时间。通过该库,你可以轻松地进行时间对象的创建、时间戳的获取、时间格式化的操作以及时间字符串的解析等。 以下是一个详细的教程,帮助你理解和使用date库。 from_str函数解析字符串时间时,只解析数字串,然后根据年来定位,先确定年的位置,然后遵循下面规则进行解析,不存在的时间以0处理。 关于format函数的格式化语法与C语言的strftime中格式说明符完全一致,以下是一个完整的列表,列出了所有常用的格式说明符:

日期说明符:

  • %Y 2001:完整的公历年份,零填充至4位数字。支持从-262144到262143的年份。注意:公元前1年(BCE)之前或公元9999年(CE)之后的年份,需要加上正负号(+/-)。
  • %C 20:公历年份除以100,零填充至2位数字。
  • %y 01:公历年份对100取模,零填充至2位数字。
  • %m 07:月份数字(01–12),零填充至2位数字。
  • %b Jul:月份的缩写名称。始终是3个字母。
  • %B July:月份的完整名称。在解析时也接受相应的缩写。
  • %h Jul:与%b相同。
  • %d 08:日期数字(01–31),零填充至2位数字。
  • %e 8:与%d相同,但使用空格填充。与%_d相同。
  • %a Sun:星期几的缩写名称。始终是3个字母。
  • %A Sunday:星期几的完整名称。在解析时也接受相应的缩写。
  • %w 0:星期天=0,星期一=1,...,星期六=6。
  • %u 7:星期一=1,星期二=2,...,星期天=7。(ISO 8601)
  • %U 28:以星期天为一周开始的周数(00–53),零填充至2位数字。
  • %W 27:与%U相同,但一周的开始是那一年的第一个星期一。
  • %G 2001:与%Y相同,但使用ISO 8601周日期中的年份。
  • %g 01:与%y相同,但使用ISO 8601周日期中的年份。
  • %V 27:与%U相同,但使用ISO 8601周日期中的周数(01–53)。
  • %j 189:一年中的第几天(001–366),零填充至3位数字。
  • %D 07/08/01:月-日-年格式。与%m/%d/%y相同。
  • %x 07/08/01:本地日期表示(例如,12/31/99)。
  • %F 2001-07-08:年-月-日格式(ISO 8601)。与%Y-%m-%d相同。
  • %v 8-Jul-2001:日-月-年格式。与%e-%b-%Y相同。

时间说明符:

  • %H 00:小时数字(00–23),零填充至2位数字。
  • %k 0:与%H相同,但使用空格填充。与%_H相同。
  • %I 12:12小时制中的小时数字(01–12),零填充至2位数字。
  • %l 12:与%I相同,但使用空格填充。与%_I相同。
  • %P am:12小时制中的am或pm。
  • %p AM:12小时制中的AM或PM。
  • %M 34:分钟数字(00–59),零填充至2位数字。
  • %S 60:秒数字(00–60),零填充至2位数字。
  • %f 26490000:自上一整秒起的纳秒数。
  • %.f .026490:秒的十进制小数部分。消耗前导点。
  • %.3f .026:固定长度为3的秒的十进制小数部分。
  • %.6f .026490:固定长度为6的秒的十进制小数部分。
  • %.9f .026490000:固定长度为9的秒的十进制小数部分。
  • %3f 026:像%.3f一样,但没有前导点的秒的十进制小数部分。
  • %6f 026490:像%.6f一样,但没有前导点的秒的十进制小数部分。
  • %9f 026490000:像%.9f一样,但没有前导点的秒的十进制小数部分。
  • %R 00:34:小时-分钟格式。与%H:%M相同。
  • %T 00:34:60:小时-分钟-秒格式。与%H:%M:%S相同。
  • %X 00:34:60:本地时间表示(例如,23:13:48)。
  • %r 12:34:60 AM:本地的12小时制时间表示(例如,11:11:04 PM)。如果本地没有12小时制格式,则回退到%X。

时区说明符:

  • %Z ACST:本地时区名称。在解析时跳过所有非空白字符。在格式化时与%:z相同。
  • %z +0930:从本地时间到UTC的偏移量(UTC为+0000)。
  • %:z +09:30:与%z相同,但带有冒号。
  • %::z +09:30:00:从本地时间到UTC的偏移量,包括秒。
  • %:::z +09:从本地时间到UTC的偏移量,不包括分钟。
  • %#z +09:解析专用:与%z相同,但允许分钟缺失或存在。

日期和时间说明符:

  • %c Sun Jul 8 00:34:60 2001:本地的日期和时间(例如,Thu Mar 3 23:05:25 2005)。
  • %+ 2001-07-08T00:34:60.026490+09:30:ISO 8601/RFC 3339日期和时间格式。
  • %s 994518299:UNIX时间戳,自1970-01-01 00:00 UTC起的秒数。

特殊说明符:

  • %t:制表符(\t)字面量。
  • %n:换行符(\n)字面量。
  • %%:百分号(%)字面量。
可以覆盖数值说明符%?的默认填充行为。这不适用于其他说明符,否则将导致BAD_FORMAT错误。

修饰符

  • %-?:抑制任何填充,包括空格和零。(例如,%j = 012,%-j = 12)
  • %_?:使用空格作为填充。(例如,%j = 012,%_j = 12)
  • %0?:使用零作为填充。(例如,%e = 9,%0e = 09)

备注:

  • %C%y:这是向下取整除法,因此公元前100年(年份编号-99)将打印为-1和99。
  • %U:一周从那一年的第一个星期天开始。可能存在周0,用于表示第一个星期天之前的日期。
  • %G%g%V:一周是那一年中至少有4天的第一周。不存在周0,因此应与%G或%g一起使用。
  • %S:考虑到闰秒,因此60是可能的。
  • %f%.f%f%.f是显著不同的格式化说明符。%f计算自上一整秒起的纳秒数,而%.f是秒的小数部分。例如,7微秒用%f格式化为7000,用%.f格式化为.000007。
  • %Z:由于BT的date库只了解时区偏移量而不了解时区本身,因此在使用此格式化说明符时,它只会打印偏移量。时区缩写将不会被打印,从解析的数据中不会填充偏移量,也不会对其进行验证。时区完全被忽略。这与glibc的strptime对此格式代码的处理方式类似。无法可靠地从缩写转换为偏移量,例如CDT既可以表示北美中部夏令时间(Central Daylight Time),也可以表示中国夏令时间(China Daylight Time)。
  • %+:与%Y-%m-%dT%H:%M:%S%.f%:z相同,即秒的小数部分有0、3、6或9位数字,时区偏移量中有冒号。此格式还支持用Z或UTC代替%:z。它们等同于+00:00。请注意,所有T、Z和UTC在解析时都不区分大小写。典型的strftime实现对于此说明符有不同的(且依赖于区域的)格式。虽然BT的date的%+格式更加稳定,但如果您想要控制确切的输出,最好避免使用此说明符。
  • %s:此说明符不会进行填充,并且可以是负数。对于BT的date库而言,它只考虑非闰秒,因此与ISO C的strftime行为略有不同。