当前位置: 首页 > news >正文

Pyhon——datetime、calendar模块

继time模块之后,又迎来了datetime模块。它的功能也十分强大。话不多说,进入正题。

首先我们需要知道,datetime模块中定义了两个常量:date.MINYEAR = 1和date.MAXYEAR = 9999,他们表示datetime模块支持的最小年份和最大年份。

datetime模块中包含了许多跟日期时间有关的对象,我们就根据这样对象来进一步介绍datetime模块中的函数。

💦 date对象

date翻译过来就是日期,date对象自然也就表示在日历中的一个日期(年、月、日)。同时,date对象的构造函数需要传入三个参数:year、month、day。但是要注意哦❗️:这三个参数都不能超过有效日期的范围,不然程序会抛出异常。例如👇:

import datetime

a = datetime.date(2022,8,31)
print(a)
#2022-08-31

因为date是一个类的实例化,所以它也可以调用方法。

☁️ today()

它返回的是当天的日期,例如👇:

import datetime

a = datetime.date.today()
print(a)
#2022-08-31

☁️ weekday()

它返回某天是星期几,所以它需要传递一个日期参数。从0开始,0是星期天,例如👇:

import datetime

a = datetime.date.today()
b = datetime.date.weekday(a)
print(a)
print(b)
#2022-08-31
#2

☁️ isoweekday()

它和weekday方法相似,不过星期一就是1,星期天就是7。例如👇:

import datetime

a = datetime.date(2022,9,4)
b = datetime.date.isoweekday(a)
print(b)
#7

☁️ isoformat()

返回日期为ISO格式,即“YYYY-MM-DD”的字符串。我们在前面直接打印date对象调用的就是isoformat方法,例如👇:

import datetime

a = datetime.date(2022,8,31)
print(a)
print(a.isoformat())
#2022-08-31
#2022-08-31

☁️ strftime()

它可以格式化输出日期,也就是要用来格式化符号,例如👇:

import datetime

a = datetime.date(2022,8,31)
print(a.strftime("%Y-%m-%d"))
print(a.strftime("%y-%b-%d"))
#2022-08-31
#22-Aug-31

如果不了解有关日期和时间的格式化符号请看这里 → \rightarrow 格式化符号

date对象就到这样,接下来是time对象。

💦 time对象

time对象有两个常量min和max,如下👇:

import datetime
print(datetime.time.min)
print(datetime.time.max)
#00:00:00
#23:59:59.999999

time对象的构造有三个参数,分别对应时、分、秒。

☁️ isoformat()

它返回时间为ISO格式,即“HH:MM:SS”的字符串,例如👇:

import datetime
a = datetime.time(11,50,23)
print(a.isoformat())
#11:50:23

☁️ strftime()

格式化输入时间,例如👇:

import datetime
a = datetime.time(11,50,23)
print(a.strftime("%H:%M:%S"))
print(a.strftime("%p %I:%M:%S:%f"))
#11:50:23
#AM 11:50:23:000000

💦 datetime对象

datetime一看就是date和time的结合体,所以它也就包括date与time的所有信息。例如👇:

import datetime
a = datetime.datetime(2022,8,31,11,56,12)
b = datetime.datetime(2022,8,31)
print(a)
print(b)
#2022-08-31 11:56:12
#2022-08-31 00:00:00

这里需要注意哦❗️:年月日的参数是必须要传递的,其余参数可选。

☁️ today()

返回一个表示当前本地时间的datetime对象,例如👇:

import datetime
a = datetime.datetime.today()
print(a)
#2022-08-31 12:00:55.941013

☁️ now()

它返回一个表示当前本地时间的datetime对象。例如👇:

import datetime
a = datetime.datetime.now()
print(a)
#2022-08-31 18:05:18.041465

☁️ utcnow()

它返回一个当前UTC时间的datetime对象。例如👇:

import datetime
a = datetime.datetime.utcnow()
print(a)
#2022-08-31 10:06:42.436731

☁️ fromtimestamp()

它根据一个时间戳创建一个datetime对象,可选参数tzinfo指定时区信息。例如👇:

import datetime
import time
a = datetime.datetime.fromtimestamp(time.time() - 86400)
print(a)
#2022-08-30 18:11:36.732211

☁️ combine()

它根据date和time对象,创建一个datetime对象。例如👇:

import datetime
a = datetime.date(2022,8,31)
b = datetime.time(18,14,23)
c = (datetime.datetime.combine(a,b))
print(c)
#2022-08-31 18:14:23

☁️ strftime()

它可以格式化输出日期时间,例如👇:

import datetime
a = datetime.date(2022,8,31)
b = datetime.time(18,14,23)
c = (datetime.datetime.combine(a,b))
print(c.strftime("%Y-%m-%d %H:%M:%S"))
print(c.strftime("%y-%m-%d %a %I:%M:%S"))
#2022-08-31 18:14:23
#22-08-31 Wed 06:14:23

💦 timedelta对象

它表示的是两个日期或时间的差,属性包含:日期、秒、微秒、毫秒、分钟、小时和星期。所有的属性都是可选的并且默认值是0。例如👇:

import datetime
a = datetime.datetime.now()
b = a + datetime.timedelta(hours = 9)
print(a)
print(b)
#2022-08-31 18:25:02.454888
#2022-09-01 03:25:02.454888

💦 tzinfo对象

tzinfo是一个时区对象的抽象类,datetime和time对象使用它来提供可自定义的时间调整概念。

tzinfo类不能直接使用,但是可以使用datetime.timezone生成。datetime.timezone.utc实现了UTC时区的tzinfo实例,例如👇:

import datetime
a = datetime.datetime.now(datetime.timezone.utc)
b = datetime.datetime.utcnow()
print(a)
print(b)
#2022-08-31 10:36:42.765091+00:00
#2022-08-31 10:36:42.765091

datetime.timezone是tzinfo的子类,所以也可以使用它来实现想要的时区信息。构造datetime.timezone对象时只需传入和UTC时间相隔的timedelta对象即可,例如👇:

import datetime

china_timezone = datetime.timezone(datetime.timedelta(hours = 8))
utc_timezone = datetime.timezone(datetime.timedelta(hours = 0))

china_time = datetime.datetime.now(china_timezone)
utc_time = datetime.datetime.now(utc_timezone)

print(china_time)
print(utc_time)
#2022-08-31 18:40:53.379978+08:00
#2022-08-31 10:40:53.379978+00:00

实际上,datetime.timezone.utc的本质就是datetime.timezone(datetime.timedelta(0))。

前面5个都是datetime模块中的对象,接下来是calendar模块,也就是日历。

❄️ calendar模块

该模块主要用于日历的输出,但应用的场景不是很多。

☁️ isleap()

该方法用于判断是否为闰年,是就返回True,不是返回False。例如👇:

import calendar
print(calendar.isleap(2022))
print(calendar.isleap(2024))
#False
#True

☁️ leapdays()

它返回两个年份之间闰年的总数,两个参数为两个两个年份,例如👇:

import calendar
print(calendar.leapdays(2018,2022))
print(calendar.leapdays(2000,2022))
#1
#6

☁️ month()

该方法有4个参数:theyear、themonth、w = 0、l = 0。它返回一个多行字符串格式的日历,两行标题,一周一行。每日的间隔宽度为w,每行的长度为7×w+6,l是每星期的行数。例如👇:

import calendar
print(calendar.month(2022,9))
#   September 2022
#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
import calendar
print(calendar.month(2022,9,w = 3))
#       September 2022
#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
import calendar
print(calendar.month(2022,9,l = 2))
#   September 2022

#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

☁️ monthcalendar()

该方法返回一个整数的单层嵌套列表,每个子列表装载一个星期。该月之外的日期都为0,该月之内的日期设为该日的日期,从1开始,例如👇:

import calendar
print(calendar.monthcalendar(2022,9))
#[[0, 0, 0, 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, 0]]

☁️ monthrange()

该方法返回两个整数组成的元组,第一个整数表示该月的第一天是星期几,第二个整数表示该月的天数,例如👇:

import calendar
print(calendar.monthrange(2022,9))
#(3, 30)

☁️ weekday()

该方法返回给定日期是星期几,0是星期天,例如👇:

import calendar
print(calendar.weekday(2022,9,1))
#3

☁️ calendar()

该方法返回一个由字符串组成的年历,三个月一行,间隔距离用参数c表示,默认值为6.每个宽度间隔为w,默认值为2。每行长度为21×w+18+2×c。 l l l参数是每星期的行数,默认值为1。例如👇:

import calendar
print(calendar.calendar(2022))

在这里插入图片描述
在这里插入图片描述
datetime、calendar模块就学习到这里~~

相关文章:

  • 爆刷leetcode——链表(二)
  • 【翻译】Style-Aware Normalized Loss for Improving Arbitrary Style Transfer
  • Spring的component-scan XML配置和@ComponentScan注解配置
  • Java 基础知识回顾(一)
  • shell脚本之函数的引入
  • JDK的下载与安装详细教程
  • 刷题记录(NC231128 Steadily Growing Steam,NC21467 [NOIP2018]货币系统,NC235950 多重背包)
  • 详解红黑树【C++实现】
  • Flask的一些简单代码
  • 链路追踪 - SkyWalking
  • 基于NFS共享存储实现KVM虚拟主机动态迁移
  • MySQL之常用存储引擎
  • 动手学习深度学习 02:预备知识
  • dockerkubernets篇(二十六)
  • 9.synchronized的三把锁
  • @angular/forms 源码解析之双向绑定
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Computed property XXX was assigned to but it has no setter
  • CSS 专业技巧
  • Hibernate最全面试题
  • JavaScript DOM 10 - 滚动
  • Java编程基础24——递归练习
  • Joomla 2.x, 3.x useful code cheatsheet
  • JS笔记四:作用域、变量(函数)提升
  • MD5加密原理解析及OC版原理实现
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • springboot_database项目介绍
  • VUE es6技巧写法(持续更新中~~~)
  • 阿里云Kubernetes容器服务上体验Knative
  • 订阅Forge Viewer所有的事件
  • 给Prometheus造假数据的方法
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 聊聊directory traversal attack
  • 如何设计一个比特币钱包服务
  • 如何优雅地使用 Sublime Text
  • 设计模式 开闭原则
  • 译米田引理
  • 追踪解析 FutureTask 源码
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​用户画像从0到100的构建思路
  • #、%和$符号在OGNL表达式中经常出现
  • $NOIp2018$劝退记
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (06)Hive——正则表达式
  • (11)MSP430F5529 定时器B
  • (3)nginx 配置(nginx.conf)
  • (Python第六天)文件处理
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (理论篇)httpmoudle和httphandler一览
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (一)Thymeleaf用法——Thymeleaf简介
  • .net Signalr 使用笔记
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET关于 跳过SSL中遇到的问题