Python学习笔记之日期、时间的用法

2023-05-05 17:29:27 浏览数 (1)

日期、时间

python可以通过多种方式处理日期和时间。 时间(time)、 日期时间(datetime) 和 日历(calendar) 模块可用于跟踪日期和时间。

代码语言:javascript复制
>>> import time  #导入时间模块,可以定时睡眠
>>> import datetime  #导入时间日期模块
>>> startTime = datetime.datetime.now()  #当前时间
>>> time.sleep(3)    #睡眠3秒
>>> endTime = datetime.datetime.now() #当前时间
>>> print( (endTime - startTime).seconds )  #获取时间差(秒)

>>> d1 = datetime.datetime.now()  #当前时间
>>> d2 = d1   datetime.timedelta(days = 10)   #10天后的时间
>>> d2
datetime.datetime(2018, 4, 19, 16, 2, 4, 825259)
>>> d1
datetime.datetime(2018, 4, 9, 16, 2, 4, 825259)

提供与日期和时间相关的4个模块:

  • time : time是一个仅包含与日期和时间相关的函数和常量的模块,在本模块中定义了C/C 编写的几个类。 例如,struct_time类。
  • datetime : datetime是一个使用面向对象编程设计的模块,可以在Python中使用日期和时间。它定义了几个表示日期和时间的类。
  • calendar : 日历是一个提供函数的模块,以及与Calendar相关的几个类,它们支持将日历映像生成为text,html
  • locale : 该模块包含用于格式化或基于区域设置分析日期和时间的函数。
时间间隔

时间间隔是以秒为单位的浮点数。从1970年1月1日上午12:00开始。

time 模块中的time() 函数返回1970年1月1日上午12:00开始的秒数。

但是,这个形式不能表示在时代(1970年1月1日上午12:00)之前的日期。在未来的日子也不能以这种方式表示 - 截止点是在2038年的UNIX和Windows的某个时刻。

代码语言:javascript复制
>>> import time
>>> time.time()
1523279564.329913
TimeTuple 时间元组

许多python函数将时间处理成 9 个数字的元组,如下所示:

索引字段值 04位数表示年份2018,2019… 1月份1~12 2日期1~31 3小时0~23 4分钟0~59 5秒0~61(60或61是闰秒) 6星期几0~6(0是星期一) 7一年的第几天1~366(朱利安日) 8夏令时-1, 0, 1; -1表示库确定DST

代码语言:javascript复制
>>> time.localtime()
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=9, tm_hour=21, tm_min=34, tm_sec=12, tm_wday=0, tm_yday=99, tm_isdst=0)
获取当前时间

要将从时间浮点值开始的秒数瞬间转换为时间序列,将浮点值传递给返回具有所有有效九个项目的时间元组的函数(例如本地时间)。

日期格式化函数: time.strftime() 函数。 格式字符串:时间的都是大写表示。 - %Y : 表示年,四位 - %m : 表示月,两位 - %d : 表示天,两位 - %H : 大写,表示小时 - %M : 大写,表示分钟 - %S : 大写,表示秒

代码语言:javascript复制
>>> time.strftime("%Y-%m-%d %H:%M:%S" ,time.localtime())
'2018-04-09 21:48:29'
获取一个月的日历

calendar 模块提供了广泛的方法来显示年历和月度日历。

代码语言:javascript复制
>>> import calendar
>>> calendar.month(2018, 4)  #获取的是可打印字符串
'     April 2018nMo Tu We Th Fr Sa Sun                   1n 2  3  4  5  6  7  8n 9 10 11 12 13 14 15n16 17 18 19 20 21 22n23 24 25 26 27 28 29n30n'

>>> print(calendar.month(2018, 4))   #打印
     April 2018
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
30
时间模块

time 时间模块提供了处理时间

  • clock() : 将当前CPU时间返回为浮点数秒。 为了测量不同方法的计算成本,time.clock的值比time.time()的值更有用。
  • ctime() :类似于asctime(localtime(secs)),而没有参数就像asctime()
  • time.localtime([secs]): 接受从时代(epoch)以秒为单位的瞬间,并返回与本地时间相关的时间t(t.tm_isdst为0或1,具体取决于DST是否适用于本地规则的瞬时秒)。
  • time.mktime(tupletime) : 接受在本地时间表示为时间元组的瞬间,并返回浮点值,该时间点以秒为单位表示。参数是struct_time或完整的9个元组,它返回一个浮点数,以便与time()兼容。如果输入值不能表示为有效时间,则会引发OverflowError或ValueError异常。
  • time.sleep(secs) : 暂停调用线程 secs 秒。
  • time.strftime(fmt[,tupletime]) : 接受在本地时间表示为时间元组的瞬间,并返回一个表示由字符串fmt指定的时间的字符串。
  • time.strptime(str,fmt = ‘%a %b %d %H:%M:%S %Y’)) : 按给定格式fmt解析字符串str,返回时间元组格式的时间.
  • time.time( ) : 返回当前时间时刻,即从时代(epoch)开始的浮点数秒数。
代码语言:javascript复制
import time

print ("time.localtime() : %s" , time.localtime())

time.localtime() : time.struct_time(tm_year = 2019, tm_mon = 2, tm_mday = 15, 
   tm_hour = 10, tm_min = 13, tm_sec = 50, tm_wday = 0, tm_yday = 46, tm_isdst = 0)


import time

t = (2019, 2, 15, 10, 13, 38, 1, 48, 0)
d = time.mktime(t)  #指定元组作为时间
print ("time.mktime(t) : %f" %  d)
print ("asctime(localtime(secs)): %s" % time.asctime(time.localtime(d)))
结果:
time.mktime(t) : 1550196818.000000
asctime(localtime(secs)): Fri Feb 15 10:13:38 2019

>>> time.strftime('%Y%m%d') #日期格式化
'20180409'

>>> time.strptime('20180808', '%Y%m%d')  #解析日期字符串
time.struct_time(tm_year=2018, tm_mon=8, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=220, tm_isdst=-1)
日历模块

calendar 模块提供与日历相关的功能。包括为给定的月份或年份打印文本日历的功能。 默认情况下,日历将星期一作为一周的第一天,将周日作为最后一天,可以通过调用 calendar.setfirstweekday()函数设置修改。

代码语言:javascript复制
>>> print(calendar.month(2018, 4))
     April 2018
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
30

>>> calendar.setfirstweekday(6)   #变更日历的第一天为周日
>>> print(calendar.month(2018, 4))
     April 2018
Su Mo Tu We Th Fr Sa
 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 30

-calendar.calendar(year,w = 2,l = 1,c = 6) : 返回一个具有年份日历的多行字符串格式化为三列,以c个空格分隔。 w是每个日期的字符宽度; 每行的长度为21 * w 18 2 * c,l是每周的行数。

代码语言:javascript复制
>>> calendar.setfirstweekday(0)
>>> print(calendar.calendar(2019, 2, 1, 6,3))
                                  2019

      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  6                   1  2  3                   1  2  3
 7  8  9 10 11 12 13       4  5  6  7  8  9 10       4  5  6  7  8  9 10
14 15 16 17 18 19 20      11 12 13 14 15 16 17      11 12 13 14 15 16 17
21 22 23 24 25 26 27      18 19 20 21 22 23 24      18 19 20 21 22 23 24
28 29 30 31               25 26 27 28               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  6  7             1  2  3  4  5                      1  2
 8  9 10 11 12 13 14       6  7  8  9 10 11 12       3  4  5  6  7  8  9
15 16 17 18 19 20 21      13 14 15 16 17 18 19      10 11 12 13 14 15 16
22 23 24 25 26 27 28      20 21 22 23 24 25 26      17 18 19 20 21 22 23
29 30                     27 28 29 30 31            24 25 26 27 28 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  6  7                1  2  3  4                         1
 8  9 10 11 12 13 14       5  6  7  8  9 10 11       2  3  4  5  6  7  8
15 16 17 18 19 20 21      12 13 14 15 16 17 18       9 10 11 12 13 14 15
22 23 24 25 26 27 28      19 20 21 22 23 24 25      16 17 18 19 20 21 22
29 30 31                  26 27 28 29 30 31         23 24 25 26 27 28 29
                                                    30

      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  5  6                   1  2  3                         1
 7  8  9 10 11 12 13       4  5  6  7  8  9 10       2  3  4  5  6  7  8
14 15 16 17 18 19 20      11 12 13 14 15 16 17       9 10 11 12 13 14 15
21 22 23 24 25 26 27      18 19 20 21 22 23 24      16 17 18 19 20 21 22
28 29 30 31               25 26 27 28 29 30         23 24 25 26 27 28 29
                                                    30 31
  • calendar.firstweekday(): 返回当前设置每周开始的星期。默认情况下,当日历首次输入时为0,表示星期一,可以通过setfirstweekday()修改默认设置.
代码语言:javascript复制
>>> calendar.firstweekday()
0
  • calendar.isleap(year) : 给定年份为闰年则返回True
代码语言:javascript复制
>>> calendar.isleap(2019)
False
>>> calendar.isleap(2004)
True
  • calendar.month(year,month,w = 2,l = 1) : 返回一个多行字符串,其中包含年份月份的日历,每周一行和两个标题行。 w是每个日期的字符宽度; 每行的长度为7 * w 6。 l是每周的行数。
代码语言:javascript复制
>>> print(calendar.month(2019,4,w = 4,l = 3))
            April 2019


Mon  Tue  Wed  Thu  Fri  Sat  Sun


  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   30

0 人点赞