1 # 1.在平常的工作中,我们常常需要与时间打交道,在python 中,与时间处理相关的模块有time,datetime,calendar。 2 # 2.datetime模块是重新封装了time 模块,提供了更多接口,提供的类有datetime、timedelta、date、time、tzinfo。UTC(世界协调时):即格林威治天文时间,世界标准时间。在中国为UTC+8。 3 # 3.时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量;也就是说当前时间相对1970年1月1日 00:00:00经过的秒数。 UTC+00:00时区的时刻称为epoch time即新纪元时间 。你可认为timestamp = 0 = 1970-1-1 00:00:00 UTC+0:00 4 5 # timestamp的值与时区毫无关系,因为timestamp一旦确定,其UTC时间就确定了,转换到任意时区的时间也是完全确定的,这就是为什么计算机存储的当前时间是以timestamp表示的,因为全球各地的计算机在任意时刻的timestamp都是完全相同的(假定时间已校准)。 6 7 from datetime import datetime #导入datetime模块 8 #4.datetime.now()返回当前日期和时间,其类型是datetime 9 # now = datetime.now() # 获取当前datetime 10 # print(now) #2015-05-18 16:28:07.198690 11 # 其中小数点后的198表示毫秒,690表示微秒 12 # print(type(now)) # <class 'datetime.datetime'> 13 14 # 5.要指定某个日期和时间,我们直接用参数构造一个datetime类型: 15 # from datetime import datetime 16 # dt = datetime(2015, 4, 19, 12, 20) # 用指定日期时间创建 17 # print(dt) #2015-04-19 12:20:00 18 19 20 # 5.把一个datetime类型转换为timestamp只需要简单调用timestamp()方法: 21 # from datetime import datetime 22 # dt = datetime(2015, 4, 19, 12, 20) # 用指定日期时间创建datetime 23 # s=dt.timestamp() # 把datetime转换为timestamp 1429417200.0 24 # print(type(dt.timestamp())) #<class 'float'> 25 # 注意Python的timestamp是一个浮点数。如果有小数位,小数位表示毫秒数。某些编程语言(如Java和JavaScript)的timestamp使用整数表示毫秒数,这种情况下只需要把timestamp除以1000就得到Python的浮点表示方法。 26 27 # 6.要把timestamp转换为datetime,使用datetime提供的fromtimestamp()方法: 28 # from datetime import datetime 29 # t = 1429417200.0 30 # print(datetime.fromtimestamp(t)) #2015-04-19 12:20:00 31 # 注意到timestamp是一个浮点数,它没有时区的概念,而datetime是有时区的。上述转换是在timestamp和本地时间做转换。本地时间是指当前操作系统设定的时区。例如北京时区是东8区,则本地时间: 32 # 2015-04-19 12:20:00 33 # 实际上就是UTC+8:00时区的时间: 34 # 2015-04-19 12:20:00 UTC+8:00 35 # 而此刻的格林威治标准时间与北京时间差了8小时,也就是UTC+0:00时区的时间应该是: 36 # 2015-04-19 04:20:00 UTC+0:00 (相对于本地时间减了8小时) 37 38 # 7.timestamp也可以直接被转换到UTC标准时区的时间: 39 # from datetime import datetime 40 # t = 1429417200.0 41 # print(datetime.fromtimestamp(t)) # 本地时间 2015-04-19 12:20:00 42 # print(datetime.utcfromtimestamp(t)) # UTC时间 2015-04-19 04:20:00 43 44 #8.很多时候,用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。转换方法是通过datetime.strptime()实现,需要一个日期和时间的格式化字符串: 45 # from datetime import datetime 46 # cday = datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S') 47 # print(cday) # 2015-06-01 18:19:59 48 # 字符串'%Y-%m-%d %H:%M:%S'规定了日期和时间部分的格式。详细的说明请参考Python文档。注意转换后的datetime是没有时区信息的。 49 50 51 # 9.如果已经有了datetime对象,要把它格式化为字符串显示给用户,就需要转换为str,转换方法是通过strftime()实现的,同样需要一个日期和时间的格式化字符串: 52 # from datetime import datetime 53 # now = datetime.now() 54 # print(now.strftime('%a, %b %d %H:%M')) # Mon, May 05 16:28 55 # 格式:含义 56 # %a :本地简化星期名称, %A:本地完整星期名称 57 # %b:本地简化月份名称, %B:本地完整月份名称 58 # %H:24小时制,表示小时, %I :12小时制来表示小时 59 # %m:表示月份, %M:分钟数 60 # %S:秒数 %d:一个月中的第几天 61 62 # 10.对日期和时间进行加减实际上就是把datetime往后或往前计算,得到新的datetime。加减可以直接用+和-运算符,不过需要导入timedelta这个类: 63 # from datetime import datetime, timedelta 64 # now = datetime.now() 65 # print(now) 66 # print(now+timedelta(days=2)) 67 # print(now+timedelta(days=-2,hours=2)) 68 # print(now-timedelta(days=1)) 69 # 70 # 2019-02-20 18:31:13.255185 71 # 2019-02-22 18:31:13.255185 72 # 2019-02-18 20:31:13.255185 73 # 2019-02-19 18:31:13.255185 74 75 # 11.本地时间是指系统设定时区的时间,例如北京时间是UTC+8:00时区的时间,而UTC时间指UTC+0:00时区的时间。一个datetime类型有一个时区属性tzinfo,但是默认为None,所以无法区分这个datetime到底是哪个时区,除非强行给datetime设置一个时区: 76 # from datetime import datetime, timedelta, timezone 77 # tz_utc_8 = timezone(timedelta(hours=8)) # 创建时区UTC+8:00 78 # now = datetime.now() #2019-02-20 18:33:55.065720 79 # # datetime(2017, 8, 24, 11, 2, 37, 380073) 80 # dt = now.replace(tzinfo=tz_utc_8) # 强制设置为UTC+8:00 81 # print(dt) 82 # datetime.datetime(2017, 8, 24, 11, 2, 37, 380073, tzinfo=datetime.timezone(datetime.timedelta(0, 28800))) 83 # 如果系统时区恰好是UTC+8:00,那么上述代码就是正确的,否则,不能强制设置为UTC+8:00时区。 84 85 # 12.获取事件戳 86 # import time 87 # p=time.time() #获取当前事件戳 88 # from datetime import datetime 89 # now=datetime.fromtimestamp(p) 90 # print(p) 91 # print(now) 92 # 1550659249.0410833 93 # 2019-02-20 18:40:49.041083