Python3之时间模块

 time & datetime & calendar

一. 概述

  python 提供很多方式处理日期与时间,转换日期格式是一个常见的功能。

时间元组:很多python函数用一个元组装起来的9组数字处理时间。

字段

属性

4位年数

tm_year

2017

tm_mon

1到12

tm_mday

1到31

小时

tm_hour

0到23

分钟

tm_min

0到59

tm_sec

0到61(60或61是润秒)

一周的第几日

tm_wday

0到6(0是周一)

一年的第几日

tm_yday

1到366,一年中的第几天

夏令时

tm_isdst

是否为夏令时,值为1时是夏令时,值为0时不是夏令时,默认为-1

#从返回浮点数的时间辍方式向时间元组转换,只要将浮点数传递给如localtime之类的函数

>>> print(time.localtime(time.time()))
time.struct_time(tm_year=2018, tm_mon=5, tm_mday=18, tm_hour=18, tm_min=40, tm_sec=58, tm_wday=4, tm_yday=138, tm_isdst=0)
#当前时间为:2018年,5月,18日,18时,40分,58秒,星期四,一年中的138天,不是夏令时

python中时间日期格式化符号:

1

%y

两位数的年份表示(00-99)

2

%Y

四位数的年份表示(000-9999)

3

%m

月份(01-12)

4

%d

月内中的一天(0-31)

5

%H

24小时制小时数(0-23)

6

%I

12小时制小时数(01-12)

7

%M

分钟数(00=59)

8

%S

秒(00-59)

9

%a

本地简化星期名称

10

%A

本地完整星期名称

11

%b

本地简化的月份名称

12

%B

本地完整的月份名称

13

%c

本地相应的日期表示和时间表示

14

%j

年内的一天(001-366)

15

%p

本地A.M.或P.M.的等价符

16

%U

一年中的星期数(00-53)星期天为星期的开始

17

%w

星期(0-6),星期天为星期的开始

18

%W

一年中的星期数(00-53)星期一为星期的开始

19

%x

本地相应的日期表示

20

%X

本地相应的时间表示

21

%Z

当前时区的名称

22

%%

%号本身

二. time模块

时间相关操作,时间有三种表示方式:

  • 时间戳               1970年1月1日之后的秒,即:time.time()
  • 格式化的字符串    2014-11-11 11:11,    即:time.strftime('%Y-%m-%d')结构化时间
  • 元组包含了:年、日、星期等... time.struct_time    即:time.localtime()

 time.time()

返回当前时间的时间戳(1970纪元后经过的浮点秒数)。

时间戳单位最适于做日期运算。但是1970年之前的日期就无法以此表示了。太遥远的日期也不行,UNIX和Windows只支持到2038年。

>>> import time

>>> print(time.time())

1459999336.1963577

  

time.mktime(tupletime)

接受时间元组并返回时间辍(1970纪元后经过的浮点秒数)。

time.mktime() 函数执行与gmtime(), localtime()相反的操作,它接收struct_time对象作为参数,返回用秒数来表示时间的浮点数。

如果输入的值不是一个合法的时间,将触发 OverflowError 或 ValueError。

#!/usr/bin/python3

import time

t = (2016, 2, 17, 17, 3, 38, 1, 48, 0)

secs = time.mktime( t )

print ("time.mktime(t) : %f" %  secs)

print ("asctime(localtime(secs)): %s" % time.asctime(time.localtime(secs)))

以上实例输出结果为:

time.mktime(t) : 1455699818.000000

asctime(localtime(secs)): Wed Feb 17 17:03:38 2016

  

time.gmtime([secs])

接收时间辍(1970纪元后经过的浮点秒数)并返回格林威治天文时间下的时间元组t。注:t.tm_isdst始终为0

>>> import time

>>> print ("gmtime :", time.gmtime(1455508609.34375))

gmtime : time.struct_time(tm_year=2016, tm_mon=2, tm_mday=15, tm_hour=3, tm_min=56, tm_sec=49, tm_wday=0, tm_yday=46, tm_isdst=0)

  

time.localtime([secs])

接收时间辍(1970纪元后经过的浮点秒数)并返回当地时间下的时间元组t(t.tm_isdst可取0或1,取决于当地当时是不是夏令时)。

>>> import time

>>> print ("localtime(): ", time.localtime(1455508609.34375))

localtime():  time.struct_time(tm_year=2016, tm_mon=2, tm_mday=15, tm_hour=11, tm_min=56, tm_sec=49, tm_wday=0, tm_yday=46, tm_isdst=0)

 

time.strftime(fmt[,tupletime])

接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定。

>>> import time

>>> print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

2016-04-07 11:18:05

  

time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')

根据fmt的格式把一个时间字符串解析为时间元组。

>>> import time

>>> struct_time = time.strptime("30 Nov 00", "%d %b %y")

>>> print ("返回元组: ", struct_time)

返回元组:  time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)

  

time.altzone

返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。

>>> import time

>>> print ("time.altzone %d " % time.altzone)

time.altzone -28800

  

time.asctime([tupletime])

接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日 周二18时07分14秒)的24个字符的字符串。

>>> import time

>>> t = time.localtime()

>>> print ("time.asctime(t): %s " % time.asctime(t))

time.asctime(t): Thu Apr  7 10:36:20 2016

  

time.clock()

用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。

#!/usr/bin/python3

import time

def procedure():

time.sleep(2.5)

# time.clock

t0 = time.clock()

procedure()

print (time.clock() - t0)

# time.time

t0 = time.time()

procedure()

print (time.time() - t0)

以上实例输出结果为:

5.000000000000143e-05

2.5020556449890137

  

time.ctime([secs])

作用相当于asctime(localtime(secs)),未给参数相当于asctime()

>>> import time

>>> print ("time.ctime() : %s" % time.ctime())

time.ctime() : Thu Apr  7 10:51:58 2016

  

time.sleep(secs)

推迟调用线程的运行,secs指秒数。

#!/usr/bin/python3

import time

print ("Start : %s" % time.ctime())

time.sleep( 5 )

print ("End : %s" % time.ctime())

  

time.tzset()

根据环境变量TZ重新初始化时间相关设置。

标准TZ环境变量格式:

std offset [dst [offset [,start[/time], end[/time]]]]

参数:

std 和 dst:三个或者多个时间的缩写字母。传递给 time.tzname.

offset: 距UTC的偏移,格式: [+|-]hh[:mm[:ss]] {h=0-23, m/s=0-59}。

start[/time], end[/time]: DST 开始生效时的日期。格式为 m.w.d — 代表日期的月份、周数和日期。w=1 指月份中的第一周,而 w=5 指月份的最后一周。'start' 和 'end' 可以是以下格式之一:

Jn: 儒略日 n (1 <= n <= 365)。闰年日(2月29)不计算在内。

n: 儒略日 (0 <= n <= 365)。 闰年日(2月29)计算在内

Mm.n.d: 日期的月份、周数和日期。w=1 指月份中的第一周,而 w=5 指月份的最后一周。

time:(可选)DST 开始生效时的时间(24 小时制)。默认值为 02:00(指定时区的本地时间)。

#!/usr/bin/python3

import time

import os

os.environ['TZ'] = 'EST+05EDT,M4.1.0,M10.5.0'

time.tzset()

print (time.strftime('%X %x %Z'))

os.environ['TZ'] = 'AEST-10AEDT-11,M10.5.0,M3.5.0'

time.tzset()

print (time.strftime('%X %x %Z'))

以上实例输出结果为:

23:25:45 04/06/16 EDT

13:25:45 04/07/16 AEST

time.timezone

属性time.timezone是当地时区(未启动夏令时)距离格林威治的偏移秒数(>0,美洲;<=0大部分欧洲,亚洲,非洲)。

time.tzname

属性time.tzname包含一对根据情况的不同而不同的字符串,分别是带夏令时的本地时区名称,和不带的。

  

时间转换图:

三. datetime模块

print(datetime.now())  # 获取当前时间 2015-03-29 16:23:20.618564

print(datetime.date.fromtimestamp(time.time()-864400) ) #2016-01-16 将时间戳转成日期格式

current_time = datetime.datetime.now() #

print(current_time) #输出2016-01-26 19:04:30.335935

print(current_time.timetuple()) #返回struct_time格式

#datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])

print(current_time.replace(2014,9,12)) #输出2014-09-12 19:06:24.074900,返回当前时间,但指定的值将被替换

str_to_date = datetime.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M") #将字符串转换成日期格式

new_date = datetime.datetime.now() + datetime.timedelta(days=10) #比现在加10天

new_date = datetime.datetime.now() + datetime.timedelta(days=-10) #比现在减10天

new_date = datetime.datetime.now() + datetime.timedelta(hours=-10) #比现在减10小时

new_date = datetime.datetime.now() + datetime.timedelta(seconds=120) #比现在+120s

print(new_date)

  

  datetime转换为timestamp

>>>from datetime import datetime

>>> dt = datetime(2017,3,29,12,20)  # 用指定日期创建datetime

>>> dt.timestamp()  # 把datetime转换为timestamp

1490761200.0

  在Python中的时间戳是一个浮点小数,如果有小数位,小数位表示毫秒数。其他如Java和JavaScript中的时间戳使用整数表示毫秒数,这种情况下只需要将时间戳除以1000就可以得到和Python一样的浮点表示法。

  timestamp 转换为 datetime

>>> from datetime import datetime

>>> t = 1490761200.0

>>> print(datetime.fromtimestamp(t))  # 本地时间转换

2017-03-29 12:20:00

>>> print(datetime.utcfromtimestamp(t))  # UTC时间转换

2017-03-29 04:20:00

  str转换为datetime

>>> from datetime import datetime

>>> cday = datetime.strptime('2016-01-03 16:15:56', '%Y-%m-%d %H:%M:%S')

>>> print(cday)

2016-01-03 16:15:56

  datetime转换为str

>>> from datetime import datetime

>>> now  = datetime.now()

>>> print(now.strftime('%a, %b %d %H:%M'))

Wed, Mar 29 16:18

  

四. calendar模块

  此模块的函数都是日历相关,星期一是每周的第一天,星期天是最后一天。

calendar.calendar(year,w=2,l=1,c=6)

返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。 每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。

calendar.firstweekday( )

返回当前每周起始日期的设置。默认情况下,首次载入caendar模块时返回0,即星期一。

calendar.isleap(year)

是闰年返回True,否则为false。

calendar.leapdays(y1,y2)

返回在Y1,Y2两年之间的闰年总数。

calendar.month(year,month,w=2,l=1)

返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数。

calendar.monthcalendar(year,month)

返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。Year年month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始。

calendar.monthrange(year,month)

返回两个整数。第一个是该月的星期几的日期码,第二个是该月的日期码。日从0(星期一)到6(星期日);月从1到31。

calendar.prcal(year,w=2,l=1,c=6)

相当于 print calendar.calendar(year,w,l,c).

calendar.prmonth(year,month,w=2,l=1)

相当于 print calendar.calendar(year,w,l,c)。

calendar.setfirstweekday(weekday)

设置每周的起始日期码。0(星期一)到6(星期日)。

calendar.timegm(tupletime)

和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间辍(1970纪元后经过的浮点秒数)。

calendar.weekday(year,month,day)

返回给定日期的日期码。0(星期一)到6(星期日)。月份为 1(一月) 到 12(12月)。

五、应用案例

每个月1号要备份上个月的数据库,所以需求出上个月的时间段,代码如下:

from datetime import datetime
import calendar

def get_lastmonth_interval()
  nn=datetime.now()
  if nn.month==1:
    year=nn.year-1
    month=12
  else:
    year=nn.year
    month=nn.month-1

  return(datetime(year,month,1).strftime("%Y%m%d"),datetime(year,month,calendar.monthrange(year,month)[1]).strftime("%Y%m%d"))

Python3之时间模块详述的更多相关文章

  1. Python3之时间模块time & datetime & calendar

    一. 简介 python 提供很多方式处理日期与时间,转换日期格式是一个常见的功能. 时间元组:很多python函数用一个元组装起来的9组数字处理时间. python中时间日期格式化符号: %y 两位 ...

  2. Python3对时间模块的操作

    python中使用time和datetime来进行时间操作 import time import datetime # 获取时间戳 time.time() # 1544601181.549864 # ...

  3. 【转】Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历))

    Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历)) 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog. ...

  4. Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历))

    Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历)) 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog. ...

  5. python_way ,day2 字符串,列表,字典,时间模块

    python_way ,day2 字符串,列表,字典,自学时间模块 1.input: 2.0 3.0 区别 2.0中 如果要要用户交互输入字符串: name=raw_input() 如果 name=i ...

  6. s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译

    时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...

  7. Python3之turtle模块的使用

    Python3之turtle模块的使用     直接扣代码就行: import turtle as t t.pensize(4) t.hideturtle() t.colormode(255) t.c ...

  8. python基础系列教程——Python3.x标准模块库目录

    python基础系列教程——Python3.x标准模块库目录 文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata ...

  9. python3.7 os模块

    #!/usr/bin/env python __author__ = "lrtao2010" #python3.7 os模块 #os模块是与操作系统交互的一个接口 # os.get ...

随机推荐

  1. oracle 编译包的时候,一直提示正在编译

    select b.sid,b.serial#,b.machine,b.terminal,b.program,b.process,b.status from v$lock a , v$session b ...

  2. Js判断一个字符串是否包含一个子串

    Js中经常遇到判断一个字符串是否包含一个子串,java语言中有containes的方法,直接调用就可以了.除非引用第三方数据库,Js中没有contains方法. 为了实现更java语言中contain ...

  3. 【转】【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)

    原文地址:http://www.cnblogs.com/baiboy/p/orc3.html 阅读目录 目录 RAC 工作原理和相关组件 ClusterWare 架构 RAC 软件结构 集群注册(OC ...

  4. word2016如何英汉互译

    1.如果是一篇英文文档且是pdf格式,可以用word2016打开直接转化成了word,就算不是会员也可以的,在此附上16版的光盘安装包,可以百度自行下载 (链接:https://pan.baidu.c ...

  5. HDU2147 - kiki's game 【巴什博弈】

    Recently kiki has nothing to do. While she is bored, an idea appears in his mind, she just playes th ...

  6. docker数据卷的使用 -v --volumes--from

    总结一下docker数据管理的三种方法: 1.普通的挂在数据: -v docker run  -v /father/path:/child/path-v 参数会把当前系统的文件目录/father/pa ...

  7. Spring 的IOC和DI

    IOC:IOC其实就是一种容器,该容器会主动的将资源推送给他所管理的组件, 组件所要做的仅是一种合适的方式来接受资源,这种行为也被称为查找的被动形式! IOC的反转控制:传统应用程序是由我们自己在对象 ...

  8. 2019-04-03 SQL Group By某列,预先对该列进行一个预处理,提炼出共有的信息,即关键字case when 列名什么条件 then 赋值 else 赋值 end as 新列名

    select sum(发行金额) from( select PoolNameFormat,count(cast(ItemValue as decimal(19,4))) as 发行笔数,sum(cas ...

  9. volatile可见性和指令重排

    volatile关键字的2个作用 1.线程的可见性 2.防止指令重排 什么是线程的可见性? 线程的可见性 就是一个线程对一个变量进行更改操作 其他线程获取会获得最新的值. 线程在执行的行 操作主线程的 ...

  10. Storm同时接收多个源(spout和bolt)

    参考: http://blog.csdn.net/nyistzp/article/details/51483779