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),函数也不例外,也是第一类对象.既然是对象,那就可以当作普通的对象数据处理,比如 ...
随机推荐
- jQuery中的属性选择器
先看代码,后面详细解释: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- JavaScript2 基础
运算符 赋值运算符 用于给变量赋值. y=5;/z=2; 算术运算符 即算数符号,是基本算数运算.+ 加 / - 减/ * 乘/ / 除/ % 取余数/ ++ 自增(y++先赋值再自增/++y先自 ...
- Statistics : Data Distribution
1.Normal distribution In probability theory, the normal (or Gaussian or Gauss or Laplace–Gauss) dist ...
- ARTS-S golang单元测试
golang单元测试 在$GOPATH的src目录下建目录demo_unittest 在目录demo_unittest下建文件calc.go,内容如下: package demo_unittest f ...
- ARTS-S ansible-playbook
文件a.yml --- - hosts: cluster remote_user: ksotest gather_facts: false tasks: - name: delete dir if e ...
- DRF源码系列分析
DRF源码系列分析 DRF源码系列分析--版本 DRF源码系列分析--认证 DRF源码系列分析--权限 DRF源码系列分析--节流
- 重学前端--js是面向对象还是基于对象?
重学前端-面向对象 跟着winter老师一起,重新认识前端的知识框架 js面向对象或基于对象编程 以前感觉这两个在本质上没有什么区别,面向对象和基于对象都是对一个抽象的对象拥有一系列的行为和状态,本质 ...
- nginx代理grafana
希望通过Nginx为服务器上的grafana进行代理,实现通过在当前域名后加/grafana在公网进行访问,开始按照百度的方法弄了几个小时都不行,后面仔细看了官方的文档才弄好,Mark一下. Ngin ...
- 三、Vue 的一些语法样例
前言 其实vue 的语法在官网上都有详细的讲解和例子,我这里就不多做什么说明,只是把自己学习这些语法是练习的例子贴出来.另外官网上的例子是一个个的html文件.我这里的是一个的vue 文件,通过不同的 ...
- CCF-CSP题解 201512-3 画图
画图时思路应该清晰一点.我是将坐标\((x,y)\)映射到\(canvas[y][x]\)上. 连线注意\(+\)号的情况,填充写好\(dfs\)就好了. #include <bits/stdc ...