python3对日期和时间的常见处理

本篇文章主要介绍在Python3中如何获取时间和日期,并对其进行格式化处理。
Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间,本文以time 模块为例来转换常见的日期格式。

时间元组

很多Python函数用一个元组装起来的9组数字处理时间:

序号 字段
1 4位数年 2020
2 1到12
3 1到31
4 小时 0到23
5 分钟 0到59
6 0到61 (60或61 是闰秒)
7 一周的第几日 0到6 (0是周一)
8 一年的第几日 1到366 (儒略历)
9 夏令时 -1, 0, 1, -1是决定是否为夏令时的旗帜

上述也就是struct_time元组。这种结构具有如下属性:

序号 属性
1 tm_year 2020
2 tm_mon 1到12
3 tm_mday 1到31
4 tm_hour 0到23
5 tm_min 0到59
6 tm_sec 0到61 (60或61 是闰秒)
7 tm_wday 一周的第几日,0到6 (0是周一)
8 tm_yday 一年的第几日,1到366 (儒略历)
9 tm_isdst -1, 0, 1, -1是决定是否为夏令时的旗帜

导入time模块

首先需要在python中导入time模块。

# 导入time模块
import time

获取时间戳

每个时间戳都以自从 1970 年 1 月 1 日午夜(历元)经过了多长时间来表示,是以秒为单位的浮点小数。

时间戳单位最适于做日期运算,但是1970年之前的日期就无法以此表示了,太遥远的日期也不行,UNIX和Windows只支持到2038年。

获取原始时间戳

print(time.time())

获取以秒为单位的时间戳

print(int(time.time()))

将返回浮点数的时间戳传递给localtime函数,可以实现时间戳向元组转换

以上一个函数的执行结果如下:

Python 3.7.6 (default, Feb  4 2020, 11:26:01)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> print(time.time())
1582107006.9955
>>>
>>> print(int(time.time()))
1582107014
>>>
>>> time.localtime(time.time())
time.struct_time(tm_year=2020, tm_mon=2, tm_mday=19, tm_hour=18, tm_min=10, tm_sec=19, tm_wday=2, tm_yday=50, tm_isdst=0)
>>>

对获取的时间和日期进行格式化

可以根据需求选取各种格式:

最简单的获取可读的时间模式的函数是asctime()

print(time.asctime(time.localtime(time.time())))

也可以使用 time 模块的 strftime 方法来格式化日期,方法为:

time.strftime(format[, t])

>>> print(time.asctime(time.localtime(time.time())))
Wed Feb 19 18:14:29 2020
>>>
>>> time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
'2020-02-19 18:17:13'
>>>
>>> time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())
'Wed Feb 19 18:17:30 2020'
>>>

也可以使用 time 模块的 mktime 方法来将字符串转换为时间戳,方法为:

time.mktime(p_tuple)

>>> time.mktime(time.strptime("2020-02-19 18:17:13", "%Y-%m-%d %H:%M:%S"))
1582107433.0
>>>

python中时间日期格式化符号

  • %y 两位数的年份表示(00-99)
  • %Y 四位数的年份表示(000-9999)
  • %m 月份(01-12)
  • %d 月内中的一天(0-31)
  • %H 24小时制小时数(0-23)
  • %I 12小时制小时数(01-12)
  • %M 分钟数(00=59)
  • %S 秒(00-59)
  • %a 本地简化星期名称
  • %A 本地完整星期名称
  • %b 本地简化的月份名称
  • %B 本地完整的月份名称
  • %c 本地相应的日期表示和时间表示
  • %j 年内的一天(001-366)
  • %p 本地A.M.或P.M.的等价符
  • %U 一年中的星期数(00-53)星期天为星期的开始
  • %w 星期(0-6),星期天为星期的开始
  • %W 一年中的星期数(00-53)星期一为星期的开始
  • %x 本地相应的日期表示
  • %X 本地相应的时间表示
  • %Z 当前时区的名称
  • %% %号本身

获取某月日历

Calendar模块有很广泛的方法用来处理年历和月历,例如打印某月的月历:

>>> import calendar
>>> print(calendar.month(2020, 2))
   February 2020
Mo Tu We Th Fr Sa Su
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29

>>>
>>> print(calendar.calendar(2020))
                                  2020

      January                   February                   March
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
       1  2  3  4  5                      1  2                         1
 6  7  8  9 10 11 12       3  4  5  6  7  8  9       2  3  4  5  6  7  8
13 14 15 16 17 18 19      10 11 12 13 14 15 16       9 10 11 12 13 14 15
20 21 22 23 24 25 26      17 18 19 20 21 22 23      16 17 18 19 20 21 22
27 28 29 30 31            24 25 26 27 28 29         23 24 25 26 27 28 29
                                                    30 31

       April                      May                       June
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
       1  2  3  4  5                   1  2  3       1  2  3  4  5  6  7
 6  7  8  9 10 11 12       4  5  6  7  8  9 10       8  9 10 11 12 13 14
13 14 15 16 17 18 19      11 12 13 14 15 16 17      15 16 17 18 19 20 21
20 21 22 23 24 25 26      18 19 20 21 22 23 24      22 23 24 25 26 27 28
27 28 29 30               25 26 27 28 29 30 31      29 30

        July                     August                  September
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
       1  2  3  4  5                      1  2          1  2  3  4  5  6
 6  7  8  9 10 11 12       3  4  5  6  7  8  9       7  8  9 10 11 12 13
13 14 15 16 17 18 19      10 11 12 13 14 15 16      14 15 16 17 18 19 20
20 21 22 23 24 25 26      17 18 19 20 21 22 23      21 22 23 24 25 26 27
27 28 29 30 31            24 25 26 27 28 29 30      28 29 30
                          31

      October                   November                  December
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
          1  2  3  4                         1          1  2  3  4  5  6
 5  6  7  8  9 10 11       2  3  4  5  6  7  8       7  8  9 10 11 12 13
12 13 14 15 16 17 18       9 10 11 12 13 14 15      14 15 16 17 18 19 20
19 20 21 22 23 24 25      16 17 18 19 20 21 22      21 22 23 24 25 26 27
26 27 28 29 30 31         23 24 25 26 27 28 29      28 29 30 31
                          30

>>>


你可能感兴趣的:(python3对日期和时间的常见处理)