pyhton中对时间的处理主要有两个模块: time和datetime
# -*- coding: utf-8 -*-
# author: inpurer(月小水长)
# pc_type lenovo
# create_date: 2018/12/3
# file_name: timetest.py
# description: 月小水长,热血未凉
import time
t0 = time.time()
#description: 输出当前时间距离1970.1.1的秒数,精确到小数点后6位,也叫做时间戳
#output sample: 1543799532.602318
print(t0)
t1 = time.localtime(t0)
#description: 把时间戳转成元组,包含七个元素,前六个见名知意,tm_wday是指今天是当前周的第几天(index from 0),tm_yday类似,tm_isdst是否是夏令时,不用关心
#output sample: time.struct_time(tm_year=2018, tm_mon=12, tm_mday=3, tm_hour=9, tm_min=22, tm_sec=24, tm_wday=0, tm_yday=337, tm_isdst=0)
print(t1)
#so,可以这样输出今天是今年的第多少天
print(t1[-2]+1)
#下面是对该元组的格式化
#description: 简单可读形式
#output sample: Mon Dec 3 09:31:18 2018
t2 = time.asctime(t1)
print(t2)
#description: 可通过参数设置成各种形式,下面是一种标准形式,各参数见名知意
#output sample: 2018-12-03 09:33:36
t3 = time.strftime("%Y-%m-%d %H:%M:%S", t1)
print(t3)
#%y 两位数的年份表示(00-99)
# %Y 四位数的年份表示(000-9999)
# %m 月份(01-12)
# %d 月内中的一天(0-31)
# %H 24小时制小时数(0-23)
# %I 12小时制小时数(01-12)
# %M 分钟数(00=59)
# %S 秒(00-59)
#
# %a 本地简化星期名称
# %A 本地完整星期名称
# %b 本地简化的月份名称
# %B 本地完整的月份名称
# %c 本地相应的日期表示和时间表示
# %j 年内的一天(001-366)
# %p 本地A.M.或P.M.的等价符
# %U 一年中的星期数(00-53)星期天为星期的开始
# %w 星期(0-6),星期天为星期的开始
# %W 一年中的星期数(00-53)星期一为星期的开始
# %x 本地相应的日期表示
# %X 本地相应的时间表示
# %Z 当前时区的名称
# %% %号本身
# 下面是把格式化字符串转成元组
# description: 第一个参数个格式化后的字符串,后一个参数和格式化对应,便于反格式化
# output sample: time.struct_time(tm_year=2018, tm_mon=12, tm_mday=3, tm_hour=9, tm_min=47, tm_sec=7, tm_wday=0, tm_yday=337, tm_isdst=-1)
t4 = time.strptime(t3,'%Y-%m-%d %H:%M:%S')
print(t4)
# 把元组转成时间戳
#description: 是time.localtime的反函数,不过由于格式化的原因,精度有所下降
#output sample: 1543801627.0
t5 = time.mktime(t4)
print(t5)
# -*- coding: utf-8 -*-
# author: inpurer(月小水长)
# pc_type lenovo
# create_date: 2018/12/3
# file_name: timetest.py
# description: 月小水长,热血未凉
import datetime
#通过datetime.datetime.now()可以获得当前日期时间的一个实例
#这个实例是一个datetime类对象而不是字符串
#虽然直接打印该实例输出的是一个字符串,只是调用datetime实现的__str__方法而已
t0 = datetime.datetime.now()
print(t0) #print: 2018-12-03 12:55:49.905971
print(type(t0)) #print:
#然后就可以通过对象名.的方法输出各个时间信息,该信息是一个int类型
print(t0.year) #print: 2018
print(type(t0.year)) #print:
print(t0.month)
print(t0.day)
print(t0.hour)
print(t0.minute)
print(t0.second)
#然后是datetime模块中datetime的格式化时间方法
import datetime
print(datetime,type(datetime))
#output:
print(datetime.datetime,type(datetime.datetime))
#output:
t0 = datetime.datetime.now()
print(t0,type(t0))
#output: 2018-12-05 20:30:51.149646
t1 = t0.strftime("%Y-%m-%d %H-%M-%S")
print(t1,type(t1))
#output: 2018-12-05 20-30-51
可以看出datetime.datetime.now()之后的格式化时间和time模块还是非常相似的
理论上我们可以通过拼接datetime.datetime.now()实例的各个时间变量来构建我们自己的想要时间,例如我们想要存储year-month-day
这样的时间信息,我们可以这样做:
import datetime
t0 = datetime.datetime.now()
#注意year/month/day都是int类型,不像java那样可以直接拼接字符串和数字
wanted_time = str(t0.year)+"-"+str(t0.month)+"-"+str(t0.day)
但是,这样做会有非常尴尬的问题:格式不统一,可能会出现下面这样的存储形式:
2018-1-1
2018-1-11
2018-11-1
2018-11-11
…
特别是在数据量非常庞大的时候,阅读起来非常费力,这是因为year/month/day这些都是int型,所以1
就是1
,不会显示成01
,要实现对齐效果,必须还得字符串的格式化,所以,我通常用的是time模块(个人习惯而已,你也可以用datetime)
import time
t0 = time.localtime()
wanted_time = time.strftime("%Y-%m-%d",t0)
就拿上面刚刚说的wanted_time
来说,可以直接通过>
、=
、<
这些符号来比较,因为wanted_time
就是一个字符串。字符串的比较规则是每一字符逐一比较。