time和datetime模块

  1. time模块

1)time模块中时间表现的格式主要有三种:

  a、timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量

  b、struct_time时间元组,共有九个元素组。

  c、formattime 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。

time和datetime模块_第1张图片 

datatime模块重新封装了time模块,提供更多接口,提供的类有:date,time,datetime,timedelta,tzinfo;

 

2)struct_time元组元素结构

属性                            值

tm_year(年)                  比如2011

tm_mon(月)                   1 - 12

tm_mday(日)                  1 - 31

tm_hour(时)                  0 - 23

tm_min(分)                   0 - 59

tm_sec(秒)                   0 - 61

tm_wday(weekday)             0 - 6(0表示周日)

tm_yday(一年中的第几天)        1 - 366

tm_isdst(是否是夏令时)        默认为-1

 

3)format time结构化表示

格式        含义

%a        本地(locale)简化星期名称

%A        本地完整星期名称

%b        本地简化月份名称

%B        本地完整月份名称

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

%d        一个月中的第几天(01 - 31)

%H        一天中的第几个小时(24小时制,00 - 23)

%I        第几个小时(12小时制,01 - 12)

%j        一年中的第几天(001 - 366)

%m        月份(01 - 12)

%M        分钟数(00 - 59)

%p        本地am或者pm的相应符

%S        秒(01 - 61)

%U        一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。

%w        一个星期中的第几天(0 - 6,0是星期天)

%W        和%U基本相同,不同的是%W以星期一为一个星期的开始。

%x        本地相应日期

%X        本地相应时间

%y        去掉世纪的年份(00 - 99)

%Y        完整的年份

%Z        时区的名字(如果不存在为空字符)

%%        ‘%’字符

 

4)主要time生成方法和time格式转换方法

  • 获取当前时间timestamp

>>>import time
>>>time.time
1487140522.975

  • 生成struct_time

>>>time.localtime()
time.struct_time(tm_year=2017,tm_mon=2, tm_mday=15, tm_hour=14, tm_min=52, tm_sec=34, tm_wday=2, tm_yday=46,tm_isdst=0)

  • timestamp转换成struct_time本地时间

>>>time.localtime(time.time())
time.struct_time(tm_year=2017,tm_mon=2, tm_mday=15, tm_hour=14, tm_min=36, tm_sec=29, tm_wday=2, tm_yday=46,tm_isdst=0)

  • timestamp转换成struct_time 格林威治时间

>>>time.gmtime()
>>>time.gmtime(time.time())
time.struct_time(tm_year=2017,tm_mon=2, tm_mday=15, tm_hour=6, tm_min=57, tm_sec=30, tm_wday=2, tm_yday=46,tm_isdst=0)

  • struct_time转换成timestamp

>>>time.mktime(time.localtime())
1487141742.0

  • struct_time转换成format_time

>>>time.strftime("%Y-%m-%d%X")
>>>time.strftime("%Y-%m-%d%X",time.localtime())
'2017-02-1515:12:29'

  • 生成固定格式的时间表示格式

>>>time.asctime(time.localtime())
>>>time.ctime(time.time())
'WedFeb 15 15:13:09 2017'

  • 常见结构化时间组合

>>>print time.strftime("%Y-%m-%d %X")
2017-02-1515:23:40

  • time加减

#timestamp加减单位以秒为单位

>>>import time
>>>t1= time.time()
>>>t2=t1+10
>>>print time.ctime(t1)#Wed Oct 26 21:15:30 2016
>>>print time.ctime(t2)#Wed Oct 26 21:15:40 2016
WedFeb 15 15:24:53 2017
WedFeb 15 15:25:03 2017

  1. datetime模块

datetime是Python处理日期和时间的标准库。注意到datetime是模块,datetime模块还包含一个datetime类,通过fromdatetime import datetime导入的才是datetime这个类。如果仅导入import datetime,则必须引用全名datetime.datetime。

  • 获取当前日期和时间

>>>from datetime import datetime
>>> now = datetime.now() # 获取当前datetime
>>>print(now)
2015-05-1816:28:07.198690
>>>print(type(now))

  • 获取指定日期和时间

要指定某个日期和时间,我们直接用参数构造一个datetime:

>>>from datetime import datetime
>>> dt = datetime(2015, 4, 19, 12, 20) # 用指定日期时间创建datetime
>>>print(dt)
2015-04-1912:20:00

  • datetime转换为timestamp

在计算机中,时间实际上是用数字表示的。我们把1970年1月1日 00:00:00 UTC+00:00时区的时刻称为epoch time,记为0(1970年以前的时间timestamp为负数),当前时间就是相对于epoch time的秒数,称为timestamp

可以认为:

timestamp= 0 = 1970-1-1 00:00:00 UTC+0:00

对应的北京时间是:

timestamp= 0 = 1970-1-1 08:00:00 UTC+8:00

可见timestamp的值与时区毫无关系,因为timestamp一旦确定,其UTC时间就确定了,转换到任意时区的时间也是完全确定的,这就是为什么计算机存储的当前时间是以timestamp表示的,因为全球各地的计算机在任意时刻的timestamp都是完全相同的(假定时间已校准)。

把一个datetime类型转换为timestamp只需要简单调用timestamp()方法:

>>>from datetime import datetime
>>> dt = datetime(2015, 4, 19, 12, 20) # 用指定日期时间创建datetime
>>> dt.timestamp() # 把datetime转换为timestamp
 
  

1429417200.0

 
  

注意Python的timestamp是一个浮点数。如果有小数位,小数位表示毫秒数

  • timestamp转换为datetime

要把timestamp转换为datetime,使用datetime提供的fromtimestamp()方法:

>>>from datetime import datetime
>>>t = 1429417200.0
>>>print(datetime.fromtimestamp(t))
2015-04-1912:20:00

注意到timestamp是一个浮点数,它没有时区的概念,而datetime是有时区的。上述转换是在timestamp和本地时间做转换。本地时间是指当前操作系统设定的时区。

  • str转换为datetime

很多时候,用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。转换方法是通过datetime.strptime()实现,需要一个日期和时间的格式化字符串:

>>>from datetime import datetime
>>>cday = datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')
>>>print(cday)
2015-06-0118:19:59

字符串'%Y-%m-%d%H:%M:%S'规定了日期和时间部分的格式。详细的说明参考Python文档。

注意转换后的datetime是没有时区信息的。

  • datetime转换为str

如果已经有了datetime对象,要把它格式化为字符串显示给用户,就需要转换为str,转换方法是通过strftime()实现的,同样需要一个日期和时间的格式化字符串:

>>>from datetime import datetime
>>>now = datetime.now()
>>>print(now.strftime('%a, %b %d %H:%M'))
Mon,May 05 16:28

  • datetime加减

对日期和时间进行加减实际上就是把datetime往后或往前计算,得到新的datetime。加减可以直接用+和-运算符,不过需要导入timedelta这个类:

>>>from datetime import datetime, timedelta
>>>now = datetime.now()
>>>now
datetime.datetime(2015,5, 18, 16, 57, 3, 540997)
>>>now + timedelta(hours=10)
datetime.datetime(2015,5, 19, 2, 57, 3, 540997)
>>>now - timedelta(days=1)
datetime.datetime(2015,5, 17, 16, 57, 3, 540997)
>>>now + timedelta(days=2, hours=12)
datetime.datetime(2015,5, 21, 4, 57, 3, 540997)


 
 

你可能感兴趣的:(python)