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

2020-02-19  本文已影响0人  冷若秋枫

本篇文章主要介绍在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中时间日期格式化符号

获取某月日历

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

>>>


上一篇 下一篇

猜你喜欢

热点阅读