datetime模块提供了简单和复杂的方式用于操纵日期和时间的类。虽然支持日期和时间运算,但实现的重点是为了输出格式化和操作高效地提取属性。

1. 模块内容

内容 描述
常量  
datetime.MINYEAR date和datetime对象允许的最小年份
datetime.MAXYEAR date和datetime对象允许的最大年份
 
datetime.date 日期对象,属性(year, month, day)
datetime.time 时间对象,属性(hour, minute, second, microsecond, tzinfo)
datetime.datetime 日期时间对象,属性(date和time属性组合)
datetime.timedelta Difference between two datetime values(原文)
datetime.tzinfo 时区信息对象的抽象基类, datetime和time类使用它定制化时间调节

2. datetime.date类

  date对象表示理想化日历中的日期(年、月和日), 公历1年1月1日被称为第一天,依次往后推。

  • 类方法
from datetime import date

print 'today():', date.today()  # 返回当前日期对象

print 'fromtimestamp(1491448600):', date.fromtimestamp(1491448600)  # 返回时间戳的日期对象

print 'date.fromordinal(1):', date.fromordinal(1)  # 返回对应公历序数的日期对象

# 输出
today():2017-04-06
fromtimestamp(1491448600):2017-04-06
date.fromordinal(1): 0001-01-01
  • 对象方法和属性
from datetime import date

d = date(2017, 04, 06)

print 'd.year:', d.year    # 返回date对象的年份

print 'd.month:', d.month  # 返回date对象的月份

print 'd.day:', d.day     # 返回date对象的日

print 'd.timetuple():', d.timetuple()  # 返回date对象的struct_time结构

print 'd.toordinal():', d.toordinal()  # 返回公历日期的序数

print 'd.weekday():', d.weekday()      # 返回一星期中的第几天,星期一是0

print 'd.isoweekday():', d.isoweekday()  # 返回一星期中的第几天, 星期一1

print 'd.isocalendar():', d.isocalendar()  # 返回一个元组(年份, 这一年的第几周, 周几)

print 'd.isoformat():', d.isoformat()  # 以ISO 8601格式‘YYYY-MM-DD’返回date的字符串形式

print 'd.ctime():', d.ctime()  # 返回一个表示日期的字符串

print 'd.strftime("%Y-%m-%d"):', d.strftime("%Y-%m-%d")  # 返回指定格式的日期字符串

print 'd.replace(year=2012, month=12) :', d.replace(year=2012, month=12)  # 替换

# 输出

d.year: 2017
d.month: 4
d.day: 6
d.timetuple(): time.struct_time(tm_year=2017, tm_mon=4, tm_mday=6, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=96, tm_isdst=-1)
d.toordinal(): 736425
d.weekday(): 3
d.isoweekday(): 4
d.isocalendar(): (2017, 14, 4)
d.isoformat(): 2017-04-06
d.ctime(): Thu Apr 6 00:00:00 2017
d.strftime("%Y-%m-%d"): 2017-04-06
d.replace(year=2012, month=12) : 2012-12-06

3. datetime.time类

  表示一个(当地)时间对象,与任何特定的日期无关,并且可以通过tzinfo(时区)对象进行调整。

from datetime import time

t = time(12, 10, 30, 50)

print 't.hour:', t.hour      # time对象小时数

print 't.minute:', t.minute  # time对象分钟数

print 't.second:', t.second  # time对象秒数

print 't.microsecond:', t.microsecond  # time对象微秒数

print 't.isoformat():', t.isoformat()  # 返回ISO 8601格式的时间字符串

print 't.strftime("%H:%M:%S:%f"):', t.strftime("%H:%M:%S:%f")  # 返回指定格式的时间格式

print 't.replace(hour=23, minute=0):', t.replace(hour=23, minute=0)  # 替换

# 输出

t.hour: 12
t.minute: 10
t.second: 30
t.microsecond: 50
t.isoformat(): 12:10:30.000050
t.strftime("%H:%M:%S:%f"): 12:10:30:000050
t.replace(hour=23, minute=0): 23:00:30.000050

4. datetime.datetime类

  datetime对象包含date对象和time对象的所有信息

  • 类方法
from datetime import datetime, time, date

print 'datetime.today():', datetime.today()  # 返回本地当前的时间datetime对象

print 'datetime.now():', datetime.now()  # 返回本地当前的日期和时间的datetime对象

print 'datetime.utcnow():', datetime.utcnow()  # 返回当前UTC日期和时间的datetime对象

print 'datetime.fromtimestamp(1491468000):', datetime.fromtimestamp(1491468000)  # 返回对应时间戳的datetime对象

print 'datetime.fromordinal(699000):', datetime.fromordinal(699000)  # 同date.fromordinal类似

print 'datetime.combine(date(2012,12,12), time(12,12,12)):', datetime.combine(date(2012, 12, 12), time(23, 59, 59))  # 拼接date和time

print 'datetime.strptime("2012-12-10", "%Y-%m-%d"):', datetime.strptime("2012-12-10", "%Y-%m-%d")  # 将特定格式的日期时间字符串解析成datetime对象

# 输出
datetime.today(): 2017-04-06 16:53:12.080000
datetime.now(): 2017-04-06 16:53:12.080000
datetime.utcnow(): 2017-04-06 08:53:12.080000
datetime.fromtimestamp(1491468000): 2017-04-06 16:40:00
datetime.fromordinal(699000): 1914-10-19 00:00:00
datetime.combine(date(2012,12,12), time(12,12,12)): 2012-12-12 23:59:59
datetime.strptime("2012-12-10", "%Y-%m-%d"): 2012-12-10 00:00:00
  • 对象方法和属性
from datetime import datetime
d = datetime(2017, 04, 06, 12, 10, 30) print 'd.date():', d.date() # 从datetime中拆分出date print 'd.time():', d.time() # 从datetime中拆分出time print 'd.timetz()', d.timetz() # 从datetime中拆分出具体时区属性的time print 'd.replace(year=2016):', d.replace(year=2016) # 替换 print 'd.timetuple():', d.timetuple() # 时间数组,即struct_time结构 print 'd.toordinal():', d.toordinal() # 和date.toordinal一样 print 'd.weekday():', d.weekday() # 和date.weekday一样 print 'd.isoweekday():', d.isoweekday() # 和date.isoweekday一样 print 'd.isocalendar():', d.isocalendar() # 和date.isocalendar一样 print 'd.isoformat():', d.isoformat() # 同上 print 'd.ctime():', d.ctime() # 同上 print 'd.strftime("%Y/%m/%d %H:%M:%S"):', d.strftime('%Y/%m/%d %H:%M:%S') # 同上 # 输出
d.date(): 2017-04-06
d.time(): 12:10:30
d.timetz() 12:10:30
d.replace(year=2016): 2016-04-06 12:10:30
d.timetuple(): time.struct_time(tm_year=2017, tm_mon=4, tm_mday=6, tm_hour=12, tm_min=10, tm_sec=30, tm_wday=3, tm_yday=96, tm_isdst=-1)
d.toordinal(): 736425
d.weekday(): 3
d.isoweekday(): 4
d.isocalendar(): (2017, 14, 4)
d.isoformat(): 2017-04-06T12:10:30
d.ctime(): Thu Apr 6 12:10:30 2017
d.strftime("%Y/%m/%d %H:%M:%S"): 2017/04/06 12:10:30

5. datetime.timedelta类

  timedelta对象表示一个时间段,即两个日期 (date) 或日期时间 (datetime) 之间的差。支持参数:weeks、days、hours、minutes、seconds、milliseconds、microseconds。但是据官方文档说其内部只存储days、seconds 和 microseconds,其他单位会做对应的时间转换。

>>>from datetime import timedelta, date, datetime
>>>d = date.today()
>>>print d
2017-04-06
>>>print d - timedelta(days=5) # 计算前5天
2017-04-01 >>>dt = datetime.now()
>>>print dt
2017-04-06 17:51:03.568000
>>>print dt - timedelta(days=1, hours=5) # 计算前1天5小时
2017-04-05 12:51:03.568000

6. 格式字符串

  datetime、date、time 都提供了 strftime() 方法,该方法接收一个格式字符串,输出日期时间的字符串表示。支持的转换格式如下:

字符  含义   例子 
%a 英文星期的简写 Sun, Mon, …, Sat
%A 英文星期的全拼 Sunday, Monday, …, Saturday
%w 星期几,星期天为0,星期六为6 0, 1, …, 6
%d 这个月的第几天,以0填充的10进制 01, 02, …, 31
%b 月份英文简写 Jan, Feb, …, Dec
%B 月份英文全拼 January, February, …, December
%m 月份数,以0填充的10进制 01, 02, …, 12
%y 不带世纪的年份 00, 01, …, 99
%Y 带有世纪的年份 1970, 1988, 2001, 2013
%H 24小时制的小时数 00, 01, …, 23
%I 12小时制的小时数 01, 02, …, 12
%p AM或者PM AM, PM
%M 分钟 00, 01, …, 59
%S 秒数 00, 01, …, 59
%f 微秒 000000, 000001, …, 999999
%z 与utc时间的间隔 (), +0000, -0400, +1030
%Z 时区 (), UTC, EST, CST
%j 当年的第几天 001, 002, …, 366
%U 当年的第几周(星期天作为周的第一天) 00, 01, …, 53
%W 当年的第几周(星期一作为周的第一天) 00, 01, …, 53
%c 日期时间的字符串表示 Tue Aug 16 21:30:00 1988
%X 时间字符串表示 21:30:00
%x 日期字符串表示 08/16/88
%% 相当于转意等于一个% %

7. 常见应用

  • 时间戳转日期
>>>from datetime import datetime
>>>timestamp = 1491550000
>>>dt = datetime.fromtimestamp(timestamp)
>>>print dt
2017-04-07 15:26:40
>>>print dt.strftime('%Y-%m-%d')
2017-04-07
  • 字符串转日期
>>>from datetime import datetime
>>>str = '2012-12-10'
>>>dt =datetime.strptime(str, '%Y-%m-%d')
>>>print dt.strftime('%Y/%m/%d')
>>>2012/12/10
  • 计算前几天日期
>>>from datetime import datetime, timedelta
>>>td = datetime.today()
>>>print td
2017-04-07 16:27:52.111000
>>>print dt.strftime('%Y/%m/%d')
2017-04-06 16:27:52.111000

Python标准库笔记(3) — datetime模块的更多相关文章

  1. Python标准库笔记(11) — Operator模块

    Operator--标准功能性操作符接口. 代码中使用迭代器时,有时必须要为一个简单表达式创建函数.有些情况这些函数可以用一个lambda函数实现,但是对于某些操作,根本没必要去写一个新的函数.因此o ...

  2. Python标准库笔记(10) — itertools模块

    itertools 用于更高效地创建迭代器的函数工具. itertools 提供的功能受Clojure,Haskell,APL和SML等函数式编程语言的类似功能的启发.它们的目的是快速有效地使用内存, ...

  3. Python标准库笔记(9) — functools模块

    functools 作用于函数的函数 functools 模块提供用于调整或扩展函数和其他可调用对象的工具,而无需完全重写它们. 装饰器 partial 类是 functools 模块提供的主要工具, ...

  4. Python标准库笔记(8) — pprint模块

    struct模块提供了用于在字节字符串和Python原生数据类型之间转换函数,比如数字和字符串. Python版本: 2.x & 3.x 该模块作用是完成Python数值和C语言结构体的Pyt ...

  5. Python标准库笔记(6) — struct模块

    该模块作用是完成Python数值和C语言结构体的Python字符串形式间的转换.这可以用于处理存储在文件中或从网络连接中存储的二进制数据,以及其他数据源. 用途: 在Python基本数据类型和二进制数 ...

  6. Python 标准库笔记(1) — String模块

    原文出处: j_hao104 String模块包含大量实用常量和类,以及一些过时的遗留功能,并还可用作字符串操作. 1. 常用方法 常用方法 描述 str.capitalize() 把字符串的首字母大 ...

  7. (转)Python 标准库笔记:string模块

    String模块包含大量实用常量和类,以及一些过时的遗留功能,并还可用作字符串操作. 原文:http://www.10tiao.com/html/384/201709/2651305041/1.htm ...

  8. Python标准库笔记(1) — string模块

    String模块包含大量实用常量和类,以及一些过时的遗留功能,并还可用作字符串操作. 1. 常用方法 常用方法 描述 str.capitalize() 把字符串的首字母大写 str.center(wi ...

  9. Python标准库笔记(4) — collections模块

    这个模块提供几个非常有用的Python容器类型 1.容器 名称 功能描述 OrderedDict 保持了key插入顺序的dict namedtuple 生成可以使用名字来访问元素内容的tuple子类 ...

随机推荐

  1. Tomcat中session的管理机制

    1.       请求过程中的session操作: 简述:在请求过程中首先要解析请求中的sessionId信息,然后将sessionId存储到request的参数列表中.然后再从 request获取s ...

  2. Git每次进入都需要输入用户名和密码的问题解决

    解决方法: 在项目目录下输入以下命令: git config --global credential.helper store 使用git pull 的时候回提示再输下用户名和密码就行了.

  3. intellij idea 无法启动或调试 spring-boot

    解决方案一: 原因是因为Working directory没有指定, 并且运行前要手动执行mvn clean install命令才可以.所以导致错误了.希望大家不要犯类似错误. 解决方式二: 看看你的 ...

  4. 同志亦凡人第五季/全集BQueer As Folk 5迅雷下载

    同志亦凡人 第五季 Queer as Folk Season 5 (2005) 本季看点:这是一群生活在匹兹堡男人和男人,女人和女人的故事.在他们的王国里有各色人物.王国的国王Brian(葛尔?哈罗德 ...

  5. centos7更改为启动桌面或命令行模式

    进入cenos7的命令行模式 终端输入“init 3”回车进入命令行模式 登录成功后 # systemctl get-default //获取当前系统启动模式 查看配置文件 # cat /etc/in ...

  6. 架构模式逻辑层模式之:表模块(Table Model)

    表模块和领域模型比,有两个显著区别: 1:表模块中的类和数据库表基本一一对应,而领域模型则无此要求: 2:表模块中的类的对象处理表中的所有记录,而领域模型的一个对象代表表中的一行记录: 一般情况下,我 ...

  7. HTML5 本地文件操作之FileSystemAPI实例(三)

    文件夹操作demo 1.读取根目录文件夹内容 window.requestFileSystem = window.requestFileSystem || window.webkitRequestFi ...

  8. scala编程第16章学习笔记(2)

    转换列表:toIterator, toArray,copyToArray List类的toArray方法将递归存放的列表转换为连续存放的数组 Array类的toList方法将连续存放的数组转换为递归存 ...

  9. 试用ArcGIS Server 10.1 X64 for windows

    ArcGIS 10.1 发布已经很久了,其Server只支持x64,为此我还专门下载安装了windows Server 2003 x64,进行安装测试. 我测试了集群功能,比起10.0 ,没有使用域控 ...

  10. Go语言之进阶篇连接mysql

    一.Go连接mysql 1.mysql驱动 地址:https://github.com/Go-SQL-Driver/MySQL 说明: sql.Open()函数用来打开一个注册过的数据库驱动,Go-M ...