Python语法速查: 16. 时间日期处理
本篇索引
(1)datetime模块
(2)time模块
(1)datetime模块
datetime模块可以处理时间和日期,其中包含以下类:date类、time对象、datetime对象、timedelt对象、tzinfo对象。
● date类
date类用于处理日期。
操作 | 说明 |
---|---|
创建date对象 | |
date(year, month, day) | 创建一个新的日期对象,返回的date对象是不可变的。入参year, month, day分别整数形式的年、月、日。 |
类属性 | |
date.min | 能够表示的最小日期:datetime.date(1,1,1)。 |
date.max | 能够表示的最大日期:datetime.date(9999,12,31)。 |
date.resolutiom | 不相等的日期之间最小可解析的差值:datetime.timedelta(1) |
类方法 | |
date.today() | 返回当前日期的date对象。 |
date.fromtimestamp(timestamp) | 返回对应时间戳timestamp的date对象,timestamp是time.time()函数的返回值。 |
date.fromordinal(ordinal) | 返回从最小日期(公元1年1月1日)开始算起的ordinal天的date对象。 |
实例属性 | |
d.year | 实例日期对应的年。 |
d.month | 实例日期对应的月。 |
d.day | 实例日期对应的日。 |
实例方法 | |
d.weekday() | 返回实例日期对应的周几,范围:0~6(0表示周一) |
d.isoweekday() | 返回实例日期对应的周几,范围:1~7(1表示周一) |
d.ctime() | 返回一个字符串,格式与“time模块”中的time.ctime()的格式相同。 |
d.isoformat() | 返回一个字符串(ISO 8601格式),形式为:'YYYY-MM-DD' |
d.isocalendar() | 返回一个元组:(iso_year, iso_week, iso_weekday),iso_weekday范围为:1~7,iso_week范围为:1~53(当年第一个星期四的周为第1周)。 |
d.strftime(format) | 返回一个字符串,表示日期的格式与“time模块”中的time.strftime()相同,只能用于1900年以后的日期。 format格式说明 |
d.timetuple() | 返回适合函数在time模块中使用的time_struct对象,其中小时、分、秒设为0。 |
d.toordinal() | 将实例日期转换为一个从公元1年1月日起的天数值。 |
d.replace([year [,month [,day]]]) | 返回一个新的date对象,并使用入参值代替原有值。 |
● time类
time类用于处理时间。
操作 | 说明 |
---|---|
创建time对象 | |
time(hour [,minute [,second [,microsecond [,tzinfo]]]]) | 创建一个新的时间对象,返回的time对象是不可变的。入参micorsecond是微秒,入参tzinfo是一个时区tzinfo类的实例,详见后述。 |
类属性 | |
t.min | 能够表示的最小时间:datetime.time(0,0) |
t.max | 能够表示的最大时间:datetime.time(23,59,59,999999) |
t.resolution | 不等的time对象之间的最小可解析的差值:datetime.time(0,0,1) |
实例属性 | |
d.hour | 实例日期对应的小时。 |
d.minute | 实例日期对应的分。 |
d.second | 实例日期对应的秒。 |
d.microsecond | 实例日期对应的微秒。 |
d.tzinfo | 实例日期对应的tzinfo时区。 |
实例方法 | |
t.isoformat() | 返回一个字符串,形式为:"HH:MM:SS.mmmmmm",如果微秒为0,则省略微秒部分。如果提供了时区信息,会再加上一个偏移量。 |
t.strftime(format) | 返回一个字符串,格式与“time模块”中的time.strftime()相同。 format格式说明 |
t.replace(hour [,minute [,second [,microsecond [,tzinfo]]]]) | 返回一个新的time对象,并使用入参提供的值替代原实例中的值。 |
t.dst() | 返回t.tzinfo.dst(None)的值(夏令时),是一个timedelta对象。如果未设置时区,则返回None。 |
t.tzname() | 返回t.tzinfo.tzname()的值,如果未设置时区,则返回None。 |
t.utcoffset() | 返回t.tzinfo.utcoffset(None)的值,是一个timedelta对象。如果未设置时区,则返回None。 |
● datetime类
datetime类用于处理时间和日期。
操作 | 说明 |
---|---|
创建datetime对象 | |
datetime(year, month, day [hour [,minute [,second [,microsecond [,tzinfo]]]]]) | 创建一个新的datetime对象,入参含义同date对象和time对象。返回的datetime对象是不可变的。 |
类属性 | |
datetime.min | 能够表示的最小时间:datetime.datetime(1,1,1,0,0) |
datetime.max | 能够表示的最大时间:datetime.datetime(9999,12,31,23,59,59,999999) |
datetime.resolution | 不等的datetime对象之间的最小可解析的差值:datetime.timedelta(0,0,1) |
类方法 | |
datetime.now([tz]) | 基于当前本地日期时间创建一个datetime对象,tz是可选时区信息。 |
datetime.utcnow() | 基于当前的UTC日期时间创建一个datetime对象。 |
datetime.combine(date, time) | 通过组合date对象和time对象,创建出一个datetime对象。 |
datetime.fromordinal() | 通过指定序数天数,创建一个datetime对象,时间数值均为0。 |
datetime.fromtimestamp(timestamp [,tz]) | 基于“time模块”中的time.time()函数返回的时间戳,创建一个datetime对象,tz是可选时区信息。 |
datetime.utcfromtimestamp(timestamp) | 基于“time模块”中的time.gmtime()函数返回的时间戳,创建一个datetime对象。 |
datetime.strptime(datestring, format) | 根据format中的日期格式,解析datestring中的日期字符串,从而创建一个datetime对象。解析使用“time模块”中的strptime()函数。 format格式说明 |
实例属性 | |
d.year | 实例对应的年。 |
d.month | 实例对应的月。 |
d.day | 实例对应的日。 |
d.hour | 实例对应的小时。 |
d.minute | 实例对应的分。 |
d.second | 实例对应的秒。 |
d.microsecond | 实例对应的微秒。 |
d.tzinfo | 实例对应的tzinfo时区。 |
实例方法 | |
d.date() | 返回一个具有相同日期的date对象。 |
d.time() | 返回一个具有相同时间的time对象,没有时区信息。 |
d.utctimetuple() | 返回time.struct_time对象。 |
d.timetz() | 使用相同的时间和时区信息返回time对象。 |
t.strftime(format) | 返回一个字符串,格式与“time模块”中的time.strftime()相同。 format格式说明 |
d.astimezone(tz) | 返回一个位于不同时区tz中的新datetime对象,新对象的UTC标准时间同本实例的UTC标准时间。 |
d.replace(year, month, day [hour [,minute [,second [,microsecond [,tzinfo]]]]]) | 返回一个新的datetime对象,并使用入参值代替原有值。 |
● timedelta类与日期运算
timedelta对象表示两个日期或时间之间的差值(时间跨度)。
操作 | 说明 |
---|---|
创建timedelta | |
timedelta([days [,seconds [,microsecond [,miliseconds [,minutes [,hours [,weeks]]]]]]]) | 创建表示两个日期时间之差的timedelta对象,只有days, seconds, microsecond有意义,它们用于在内部表示差值。如果提供其他参数,它们将被转换为以上三值。返回的time对象是不可变的。 |
类属性 | |
timedelta.min | 能够表示的最大跨度的负timedelta值:datetime.timedelta(-999999999) |
timedelta.max | 能够表示的最大跨度的正timedelta值:datetime.timedelta(days=999999999,hours=23,minutes59,seconds=59,microseconds=999999) |
timedelta.resolution | 不等的timedelta对象之间的最小可解析的差值:datetime.timedelta(microseconds=1) |
实例属性 | |
td.days | 实例对应的天数差。 |
td.seconds | 实例对应的秒数差(一天之内)。 |
td.microseconds | 实例对应的微秒差(一天之内)。 |
timedelta本身可进行的数学运算:
操作 | 描述 | 示例 |
---|---|---|
+ | 两个时间跨度相加 | td3 = td1 + td2 |
- | 两个时间跨度相减 | td3 = td1 - td2 |
* | 时间跨度乘以整数 | td2 = td1 * i; td2 = i * td1 |
// | 时间跨度地板除以整数 | td2 = td1 // i |
+= | 一元加法 | td2 += td1 |
-= | 一元减法 | td2 -= td1 |
- | 取负 | td2 = -td1 |
abs() | 取绝对值 | td2 = abs(td1) |
< | 小于 | td1 < td2 |
<= | 小于等于 | td1 <= td2 |
== | 相等 | td1 == td2 |
!= | 不等 | td1 != td2 |
> | 大于 | td1 > td2 |
>= | 大于等于 | td1 >= td2 |
date对象、datetime对象、时间跨度timedelta对象之间可以互相运算:
操作 | 描述 | 示例 |
---|---|---|
跨度 = 日期 - 日期 | 返回timedelta对象 | td = date1 - date2 |
日期 = 日期 - 跨度 | 返回datetime对象 | date2 = date1 - td |
日期 = 日期 + 跨度 | 返回datetime对象 | date2 = date1 + td |
< | 日期比较:小于 | date1 < date2 |
<= | 日期比较:小于 | date1 <= date2 |
== | 日期比较:相等 | date1 == date2 |
!= | 日期比较:不等 | date1 != date2 |
> | 日期比较:大于 | date1 > date2 |
>= | 日期比较:大于等于 | date1 >= date2 |
日期增加1天的计算:
import datetime
the_day = datetime.datetime(2019,1,1)
one_day = datetime.timedelta(days=1)
the_next_day = the_day + one_day
the_next_day.date().isoformat() # 结果为:'2019-01-02'
● tzinfo对象。
tzinfo仅仅是一个基类,通过继承tzinfo类和实现以下方法可创建一个时区。
操作 | 说明 |
---|---|
tz.tzname(dt) | 返回代表时区名称的字符串,如:'Asia/Shanghai',入参dt是一个datetime对象或None。 |
tz.utcoffset(dt) | 返回timedelta对象,表示本地时间与UTC时间的偏移,单位是分钟。入参dt是一个datetime对象或None。 |
tz.fromutc(dt) | 将入参dt(datetime对象)从UTC时间转换为本地时区,并返回一个新的datetime对象,此方法由datetime对象上的astimezne()方法调用,tzinfo已提供了默认实现,一般没有必要重新定义此方法。 |
tz.dst(dt) | 返回一个timedelta对象,代表夏令时(Daylight Saving Time)调整。如果没有关于夏令时的信息,则返回None。入参dt是一个datetime对象或None。 |
示例如何定义一个新的时区:
import datetime
class MyZone(datetime.tzinfo):
TZOFFSET = 8 # 与UTC相差8小时
def utcoffset(self, dt):
return datetime.timedelta(hours=TZOFFSET) def tzname(self, dt):
return 'Asia/Shanghai'
(2)time模块
time模块提供与时间相关的各种函数。在Python中,测量时间的方法是计算从“纪元开始”的秒数,在time=0秒的时刻称为:epoch。在类UNIX上,“纪元开始”为1970年1月1日,其他系统上由time.gmtime(0)决定。
● struct_time对象
time模块经常会用到struct_time对象,它具有以下属性:
属性 | 值 | 属性 | 值 |
---|---|---|---|
tm_year | 年份4位数 | tm_wday | 星期几(0~6),0表示星期一 |
tm_mon | 月(1~12) | tm_yday | 一年中第几天(1~366) |
tm_mday | 日(1~31) | tm_isdst | 夏令时(-1、0、1) |
tm_hour | 时(0~23) | ||
tm_min | 分(0~59) | ||
tm_sec | 秒(0~61) |
time模块的常量和函数:
名称 | 说明 |
---|---|
模块常量 | |
tzname | 包含“本地时区”和“本地夏令时时区”的名称的元组。 |
timezone | 本地的(非夏令时)时区。 |
altzone | 夏令时期间使用的时区。 |
daylight | 如果定义了夏令时时区,它将被设为一个非0值。 |
函数 | |
time.time() | 返回当前UTC时间,形式是从“纪元开始”的秒数(浮点数)。 |
time.mktime(tuple) | 入参为一个struct_time对象(或类似的元组),将其转换为从“纪元开始”的秒数(浮点数)。如果输入的不是有效时间,将引发OverflowError异常。 |
time.ctime([secs]) | 将从“纪元开始”计算的秒数形式的时间,转换为代表本地时间的字符串。与asctime(localtime(secs))相同。如果省略入参secs,就会使用当前时间。 |
time.asctime([tuple]) | 将gmtime()或localtime()函数返回的时间元组,转换为'Mon Jan 1 12:00:00 2019'格式的字符串。如果省略入参secs,就会使用当前时间。 |
time.gmtime([secs]) | 将从“纪元开始”计算的秒数形式的时间,转换为UTC时间,返回为struct_time对象。如果省略入参secs,就会使用当前时间。 |
time.localtime([secs]) | 将从“纪元开始”计算的秒数形式的时间,转换为本地时区时间,返回为struct_time对象。如果省略入参secs,就会使用当前时间。 |
time.strftime(format [,tm]) | 将一个struct_time格式的时间,转换为format定义的字符串形式。 format格式说明 |
time.strptime(string [,format]) | 解析一个代表时间的字符串,然后返回一个struct_time对象。format格式默认为'%a %b %d %H:%M:%S %Y'。如果不能解析字符串,就会引发ValueError异常。 format格式说明 |
time.sleep(secs) | 让当前进程进入睡眠状态并持续secs秒钟,secs是一个浮点数。 |
time.tzset() | 基于UNIX上TZ环境变量的值重置时区设置。 |
● format 格式说明
指令 | 含义 | 指令 | 含义 |
---|---|---|---|
%Y | 年(四位数) | %c | 地区的日期时间完整表示,如:'Sat Jan 1 00:00:00 2000 ' |
%y | 年(2位数) | %x | 本地区的日期表示,如:'12/31/99' |
%m | 月(01~12) | %X | 本地区的时间表示,如:'01:02:03' |
%d | 日(01~31) | %a | 地区缩写形式的星期几字符串 |
%H | 时(00~23) | %A | 地区完整的星期几字符串 |
%I | 时(01~12) | %b | 地区缩写形式的月份字符串 |
%M | 分(00~59) | %B | 地区完整形式的月份字符串 |
%S | 秒(00~59) | %Z | 时区名称(如不存在则为空字符串) |
%p | 上午或下午(AM / PM) | %% | 百分号字符 |
%w | 星期几(0~6),0表示星期天 | ||
%j | 一年中第几天(001~366) | ||
%U | 一年中第几周(00~53),星期天为首日 | ||
%W | 一年中第几周(00~53),星期一为首日 |
Python语法速查: 16. 时间日期处理的更多相关文章
- Python语法速查:目录
1. 数据类型与内置函数 2. 列表.元组.字典.集合操作 3. 字符串格式化 4. 字符串常用操作 5. 运算符.math模块.表达式 6. 循环与迭代 7. 函数基础 8. 类与对象 9. 函数进 ...
- Python语法速查: 4. 字符串常用操作
返回目录 (1)字符串常用方法 Python3中,字符串全都用Unicode形式,所以省去了很多以前各种转换与声明的麻烦.字符串属于序列,所有序列可用的方法(比如切片等)都可用于字符串. 注意:字符串 ...
- Python语法速查: 13. 操作系统服务
返回目录 本篇索引 (1)sys模块 (2)os模块 (3)与Windows相关模块 (4)subprocess模块 (5)signal模块 (1)sys模块 sys模块用于Python解释器及其环境 ...
- Python语法速查: 12. 文件与输入输出
返回目录 (1)文件基本操作 ● 文件常用操作 内置函数或方法 描述 open(name [,mode [,buffering]]) 内置函数.用来打开文件,返回一个文件对象(file对象).详见下述 ...
- Python语法速查: 3. 字符串格式化
返回目录 (1)简易字符串格式化 字符串属于不可变序列,只能生成新的,不能改变旧的.“字符串格式化”有点像以前C语言的sprintf,可以将若干变量代入格式化的字符串,生成一个符合要求的新字符串. 转 ...
- Python语法速查: 14. 测试与调优
返回目录 本篇索引 (1)测试的基本概念 (2)doctest模块 (3)unittest模块 (4)调试器和pdb模块 (5)程序探查 (6)调优与优化 (1)测试的基本概念 对程序的各个部分建立测 ...
- Python语法速查: 20. 线程与并发
返回目录 本篇索引 (1)线程基本概念 (2)threading模块 (3)线程间同步原语资源 (4)queue (1)线程基本概念 当应用程序需要并发执行多个任务时,可以使用线程.多个线程(thre ...
- Python语法速查: 15. 常用数据结构
返回目录 本篇索引 (1)array (2)bisect (3)deque (4)defaultdict (5)namedtuple (6)heapq (7)itertools (1)array ar ...
- Python语法速查: 7. 函数基础
返回目录 (1)函数基本 ● 函数是第一类对象 Python中万物皆对象,所有对象都是第一类的(first class),函数也不例外,也是第一类对象.既然是对象,那就可以当作普通的对象数据处理,比如 ...
随机推荐
- 【新】Docker实战总结
>>> 目录 <<< Docker简介 Docker优势 Docker基本概念 Docker安装使用 Docker常用命令 Docker镜像构建 Docker本地仓 ...
- HDU2255 奔小康赚小钱钱(二分图-最大带权匹配)
传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子 ...
- Java并发编程系列-(2) 线程的并发工具类
2.线程的并发工具类 2.1 Fork-Join JDK 7中引入了fork-join框架,专门来解决计算密集型的任务.可以将一个大任务,拆分成若干个小任务,如下图所示: Fork-Join框架利用了 ...
- Asp.net Core dotnet 发布类库文件 带上注释,发布预发行版,带上所有引用
带上注释 效果图 带上所有引用 效果图 预发行版 效果图 由于微软取消了 project.json 这个json 转而用了csproj 用于保存配置 所以懵逼很大一会 资料来源 project.j ...
- 3个Spring Boot项目调优的方式
前言 作为一名工程师,项目调优这事,是必须得熟练掌握的事情. 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行. 一.修改配置文件 关于修改配置文件applicati ...
- 一线互联网公司Redis使用精髓,你必须要掌握这4点!
先来看一下这些Redis面试题你会几道? 1.什么是 Redis?简述它的优缺点? 2.Redis 与 memcached 相比有哪些优势? 3.Redis 支持哪几种数据类型? 4.Redis 主要 ...
- 使用python实现数组、链表、队列、栈
引言 什么是数据结构? 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成. 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中. 比如:列表,集合和字 ...
- [answerer的算法课堂]简单描述4种排序算法(C语言实现)
[answerer的算法课堂]简单描述4种排序算法(C语言实现) 这是我第一次写文章,想要记录自己的学习生活,写得不好请包涵or指导,本来想一口气写好多种,后来发现,写太多的话反而可读性不强,而且,我 ...
- 全平台轻量开源verilog仿真工具iverilog+GTKWave使用教程
前言 如果你只是想检查Verilog文件的语法是否有错误,然后进行一些基本的时序仿真,那么Icarus Verilog 就是一个不错的选择.相比于各大FPGA厂商的IDE几个G的大小,Icarus V ...
- python内置模块-datetime
摘录 廖雪峰网站 datetime是python内置的处理日期和时间的标准库 获取当前日期和时间 >>> from datetime import datetime >> ...