时间模块time、datetime

  模块(module)是 Python 中非常重要的东西,你可以把它理解为 Python 的扩展工具。换言之,Python 默认情况下提供了一些可用的东西,但是这些默认情况下提供的还远远不能满足编程实践的需要,于是就有人专门制作了另外一些工具。这些工具被称之为“模块”

  任何一个 Pythoner 都可以编写模块,并且把这些模块放到网上供他人来使用。

  当安装好 Python 之后,就有一些模块默认安装了,这个称之为“标准库”,“标准库”中的模块不需要安装,就可以直接使用。

  如果没有纳入标准库的模块,需要安装之后才能使用。模块的安装方法,我特别推荐使用 pip 来安装。

  在平常的代码中,我们常常需要与时间打交道。在Python中,与时间处理有关的模块就包括:time,datetime,calendar(很少用,不讲),下面分别来介绍。

在开始之前,首先要说明几点:

一、在Python中,通常有这几种方式来表示时间:

  • 时间戳
  • 格式化的时间字符串
  • 元组(struct_time)共九个元素。(由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。)

二、几个定义

  UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。

  时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。

  元组(struct_time)方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。下面列出这种方式元组中的几个元素:

索引(Index)    属性(Attribute)    值(Values)
0     tm_year(年)                 比如2011
1     tm_mon(月)             1 - 12
2     tm_mday(日)                 1 - 31
3     tm_hour(时)                 0 - 23
4     tm_min(分)             0 - 59
5     tm_sec(秒)             0 - 61
6     tm_wday(weekday)            0 - 6(0表示周日)
7     tm_yday(一年中的第几天)    1 - 366
8     tm_isdst(是否是夏令时)            默认为-1

三,time模块的方法

3.1 常用函数

time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。

time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。

time.time():返回当前时间的时间戳。

time.mktime(t):将一个struct_time转化为时间戳。

time.sleep(secs):线程推迟指定的时间运行。单位为秒。

time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:'Sun Oct 1 12:04:38 2017'。如果没有参数,将会将time.localtime()作为参数传入。

time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。

time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。

  举例用法:

import time
# time模块的方法
# time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
print(time.localtime())
# time.struct_time(tm_year=2018, tm_mon=3, tm_mday=13, tm_hour=13, tm_min=44, tm_sec=0, tm_wday=1, tm_yday=72, tm_isdst=0)

# time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
print(time.gmtime())
# time.struct_time(tm_year=2018, tm_mon=3, tm_mday=13, tm_hour=5, tm_min=49, tm_sec=16, tm_wday=1, tm_yday=72, tm_isdst=0)

# time.time():返回当前时间的时间戳。
print(time.time())
# 1520920188.7989295

# time.mktime(t):将一个struct_time转化为时间戳。
a = time.localtime()
print(time.mktime(a))

# time.sleep(secs):线程推迟指定的时间运行。单位为秒。
time.sleep(0.1)
print("hello world")

# time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:
# 'Sun Oct 1 12:04:38 2017'。如果没有参数,将会将time.localtime()作为参数传入。
a = time.localtime()
print(time.asctime(a))

# time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。
# 如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
print(time.ctime())

# time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)
# 转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。
print(time.strftime("%Y-%m-%d %X", time.localtime()) )
#输出2018-03-13 14:22:13

# time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
print(time.strftime("2018-03-13 14:26:23"))
# 2018-03-13 14:26:23

3.2  time模块常用的格式化字符串

格式 说明
%a 显示简化星期名称
%A 显示完整星期名称
%b 显示简化月份名称
%B 显示完整月份名称
%c 本地相应的日期和时间表示
%d 显示当月第几天
%H 按24小时制显示小时
%I 按12小时制显示小时
%j 显示当年第几天
%m 显示月份
%M 显示分钟数)
%p 本地am或者pm的相应符
%S 显示秒数)
%U 一年中的星期数
%w 显示在星期中的第几天,默认从0开始表示周一
%W 和%U基本相同
%x 本地相应日期
%X 本地相应时间
%y 去掉世纪的年份(00 - 99)
%Y 完整的年份
%Z 时区的名字(如果不存在为空字符)
%% ‘%’字符

3.3  时间函数之间的转化关系

四,datetime模块的方法

相对于time 模块,datetime模块的接口则更直观,更容易调用

4.1datetiem模块定义了下面这几个类:

datetime.date:表示日期的类。常用的属性有year, month, day;
datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;
datetime.datetime:表示日期时间。
datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
datetime.tzinfo:与时区有关的相关信息。(这里不详细充分讨论该类,感兴趣的童鞋可以参考python手册)

  我们需要记下下面几个方法就ok

1,d=datetime.datetime.now() 返回当前的datetime日期类型

d.timestamp(),d.today(), d.year,d.timetuple()等方法可以调
import datetime
d = datetime.datetime.now()
print(d)
d1 = d.time()
print(d1)
d2 =d.today()
print(d2)
d3 = d.year
print(d3)
d4 = d.timestamp()
print(d4)
d5 = d.timetuple()
print(d5)
# 2018-03-13 14:46:13.649710
# 14:46:13.649710
# 2018-03-13 14:46:13.649710
# 2018
# 1520923573.64971
# time.struct_time(tm_year=2018, tm_mon=3, tm_mday=13, tm_hour=14, tm_min=46, tm_sec=13, tm_wday=1, tm_yday=72, tm_isdst=-1)

2,datetime.date.fromtimestamp(322222) 把一个时间戳转为datetime日期类型

import datetime
import time

d = datetime.date.fromtimestamp(0)
print(d)
# 1970-01-01
d =time.time()
d1 = datetime.date.fromtimestamp(d)
print(d1)
# 2018-03-13

3,时间运算(datetime.timedelta)

# 3时间运算
import datetime

d =  datetime.datetime.now()
print(d)
# 2018-03-13 14:51:02.755716

d1 = datetime.datetime(2017, 10, 1, 12, 53, 11, 821218)
print(d1)
# 2017-10-01 12:53:11.821218

d2 = datetime.datetime.now() + datetime.timedelta(4) #当前时间 +4天
print(d2)
# 2018-03-17 14:51:53.457663

d3 = datetime.datetime(2018, 3, 12, 14, 52, 35, 276589)
print(d3)
# 2018-03-12 14:52:35.276589

d4 = datetime.datetime.now() + datetime.timedelta(hours=4) #当前时间+4小时
print(d4)
# 2018-03-13 18:53:08.109074

4,时间替换

# 4时间替换
import datetime
d = datetime.datetime.now()
print(d)
d1 = d.replace(year=2999,month=11,day=30)
print(d1)
d2 = datetime.date(2999, 11, 30)
print(d2)
# 2018-03-13 14:56:16.880071
# 2999-11-30 14:56:16.880071
# 2999-11-30

4.2 date类

  date类表示一个日期。日期由年、月、日组成(地球人都知道~~)。date类的构造函数如下:

date.min: 返回 date(MINYEAR, 1, 1).
date.max: 返回 date(MAXYEAR, 12, 31).
date.year: 返回 年, MINYEAR和MAXYEAR之间
date.month: 返回 月, 1到12月之间
date.day: 返回 1到 n 之间.
  • year的范围是[MINYEAR, MAXYEAR],即[1, 9999];
  • month的范围是[1, 12]。(月份是从1开始的,不是从0开始的_);
  • day的最大值根据给定的year, month参数来决定。例如闰年2月份有29天;
  • date类定义了一些常用的类方法与类属性,方便操作:
  • date.max、date.min:date对象所能表示的最大、最小日期;
  • date.resolution:date对象表示日期的最小单位。这里是天。
  • date.today():返回一个表示当前本地日期的date对象;
  • date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象;

4.3  实例方法

date.replace(year, month, day):返回一个相同值的data对象, 除了这些参数给关键字指定新的值.
date.timetuple(): 返回一个time.struct_time对象.
date.toordinal(): 返回一个Gregoian Calendar对象.
date.weekday(): 返回day of the week. 星期一为0,星期日为6.
date.isoweekday(): 返回day of the week. 星期一为1,星期日为7.
date.isocalendar(): 返回一个三元组, (ISO year, ISO week number, ISO weekday).
date.isoformat(): 返回 一个'YYYY-MM-DD'的字符串格式.
date.ctime(): 返回一个字符串日期, d.ctime() 等同于 time.ctime(time.mktime(d.timetuple())).
date.strftime(format): 返回一个字符串日期, 格式自定义.

最新文章

  1. linux shell输出带颜色文本
  2. 1-学习前言&C语言概述
  3. xamarin真的是一个鸡肋吗?
  4. [sourceTree]这是一个无效的源路径
  5. gitt
  6. Java中main函数只能调用同类中的静态方法?
  7. Javascript之旅——第四站:parseInt中要注意的坑
  8. Oracle 死锁的检测查询及处理
  9. nginx重定向配置
  10. gradlew常用命令
  11. tab模块
  12. openstack kilo 流量
  13. MFC中显示 .bmp格式的位图
  14. Swift学习笔记十四
  15. DownloadProvider调试
  16. java集合概念
  17. iOS之NSPredicate(正则表达式和UIBarController)
  18. Java Web(十三) 使用javamail进行发送邮件,(使用QQ,163,新浪邮箱服务器)
  19. 纯代码实现wordpress文章隐藏内容评论可见
  20. C#2.0之可空类型

热门文章

  1. python3练习100题——013
  2. 132. 分割回文串 II
  3. css和js处理隔行换色的问题
  4. 微信小程序图片设置圆角进入页面闪动
  5. 基于Docker的Mysql Cluster集群
  6. 2分钟就能学会的【Google/百度搜索大法】了解一下?
  7. 每天进步一点点------Allegro PCB命名规则
  8. SPI(Service Provider Interface)--通过接口获取服务
  9. vue 对象数组中,相邻的且相同类型和内容的数据合并,重组新的数组对象
  10. 关于使用阿里云MAVEN镜像仓库