一.time模块
1.使用time模块来获取当前的时间并转换为指定格式
time.time()可以得到当前的时间戳
time.strftime(format[, t])将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出.
示例
import time
print (time.strftime("%H:%M:%S"))#24小时格式
print (time.strftime("%Y-%m-%d %H:%M:%S"))#24小时带日期格式,传入time.localtime()作为默认参数
print (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(1527945600.0)))#传入time.localtime(1527945600.0)作为参数
print (time.strftime("%I:%M:%S"))#12小时格式
输出:
13:40:02
2018-03-05 14:10:22
2018-06-02 21:20:00
01:40:02
格式参数:
%a 星期几的简写
%A 星期几的全称
%b 月分的简写
%B 月份的全称
%c 标准的日期的时间串
%C 年份的后两位数字
%d 十进制表示的每月的第几天
%D 月/天/年
%e 在两字符域中,十进制表示的每月的第几天
%F 年-月-日
%g 年份的后两位数字,使用基于周的年
%G 年分,使用基于周的年
%h 简写的月份名
%H 24小时制的小时
%I 12小时制的小时
%j 十进制表示的每年的第几天
%m 十进制表示的月份
%M 十时制表示的分钟数
%n 新行符
%p 本地的AM或PM的等价显示
%r 12小时的时间
%R 显示小时和分钟:hh:mm
%S 十进制的秒数
%t 水平制表符
%T 显示时分秒:hh:mm:ss
%u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)
%U 第年的第几周,把星期日做为第一天(值从0到53)
%V 每年的第几周,使用基于周的年
%w 十进制表示的星期几(值从0到6,星期天为0)
%W 每年的第几周,把星期一做为第一天(值从0到53)
%x 标准的日期串
%X 标准的时间串
%y 不带世纪的十进制年份(值从0到99)
%Y 带世纪部分的十制年份
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。
%% 百分号
2.将字符串的时间转换为时间戳
time.mktime(t) 用于将一个struct_time转换为时间戳,time.localtime接收一个时间戳返回一个struct_time,而time.mktime接收一个struct_time,返回一个时间戳
import time
a = "2018-01-01 01:00:00"
timeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S")
timeStamp = int(time.mktime(timeArray))
print(timeStamp)
输出:
1514739600
3.将字符串的显示时间格式进行修改
如a = “2013-10-10 23:40:00”,想改为 a = “2013/10/10 23:40:00”
import time
a = "2013-10-10 23:40:00"
timeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S")
otherStyleTime = time.strftime("%Y/%m/%d %H:%M:%S", timeArray)
print(otherStyleTime)
输出:
2013/10/10 23:40:00
4.将时间戳转换为(时间元组)指定格式日期
time.localtime([secs]) 将一个时间戳转换成一个当前时区的struct_time,如果seconds参数未输入,则以当前时间为转换标准,未提供secs参数时,按当前时间为准
import time
timeStamp = 1511419600
timeArray = time.localtime(timeStamp)
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
print(otherStyleTime)
输出:
2017-11-23 14:46:40
二.datetime模块
1.使用datetime模块来获取当前的日期和时间
新建一个datetime对象,日期为今天,既可以直接调用datetime.datetime.today(),也可以直接向datetime.datetime()传值,如下:
In [21]: d1 = datetime.datetime.today()
In [22]: d1
Out[22]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)
In [23]: d2 = datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)
In [24]: d2
Out[24]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)
datetime.datetime.now([tz]) 当不指定时区时,和datetime.datetime.today()是一样的
import datetime
i = datetime.datetime.now()
print(i.strftime("%Y-%m-%d %H:%M:%S"))
print ("当前的日期和时间是 %s" % i)
print ("ISO格式的日期和时间是 %s" % i.isoformat() )
print ("当前的年份是 %s" %i.year)
print ("当前的月份是 %s" %i.month)
print ("当前的日期是 %s" %i.day)
print ("dd/mm/yyyy 格式是 %s/%s/%s" % (i.day, i.month, i.year) )
print ("当前小时是 %s" %i.hour)
print ("当前分钟是 %s" %i.minute)
print ("当前秒是 %s" %i.second)
输出:
2018-03-05 14:15:18
当前的日期和时间是 2018-03-05 13:43:16.978571
ISO格式的日期和时间是 2018-03-05T13:43:16.978571
当前的年份是 2018
当前的月份是 3
当前的日期是 5
dd/mm/yyyy 格式是 5/3/2018
当前小时是 13
当前分钟是 43
当前秒是 16
2.将时间戳转换为指定格式日期
datetime.date.fromtimestamp(timestamp) 将时间戳转化为date对象
datetime.datetime.fromtimestamp(timestamp) 将时间戳转化为datetime对象
#注意:使用此方法时必须先设置好时区,否则有时差
import datetime
timeStamp = 1511419600
dateArray = datetime.datetime.utcfromtimestamp(timeStamp)
otherStyleTime = dateArray.strftime("%Y-%m-%d %H:%M:%S")
print(otherStyleTime)
输出:
2017-11-23 06:46:40
3.替换
datetime.date.replace(year, month, day) 返回一个替换后的date对象
datetime.datetime.replace(year, month, day) 返回一个替换后的datetime对象
import datetime
d1 = datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)
print (d1.replace(year=2019))
输出:
2019-08-15 08:12:34.790945
三:经常使用的时间方法
1.(将datetime对象转换为时间戳)获得三天前的时间
datetime.timedelta: 时间间隔对象(timedelta)。一个时间点(datetime)加上一个时间间隔(timedelta)可以得到一个新的时间点(datetime)。比如今天的上午3点加上5个小时得到今天的上午8点。同理,两个时间点相减会得到一个时间间隔。
datetime.datetime.timetuple() 转成struct_time格式,这样传递给time.mktime(t) 后,直接转成时间戳格式
import time
import datetime
#先获得时间数组格式的日期
threeDayAgo = (datetime.datetime.now() - datetime.timedelta(days = 3))
# 将datetime对象转换为时间戳:
timeStamp = int(time.mktime(threeDayAgo.timetuple()))
# 转换为其他字符串格式:
otherStyleTime = threeDayAgo.strftime("%Y-%m-%d %H:%M:%S")
print(otherStyleTime)
# 注:timedelta()的参数有:days,hours,seconds,microseconds
输出:
2018-03-02 14:19:44
2.获得某给定时间戳三天前的时间
import datetime
import time
timeStamp = 1520231050
dateArray = datetime.datetime.utcfromtimestamp(timeStamp)
threeDayAgo = dateArray - datetime.timedelta(days = 3)
print(threeDayAgo)
输出:
2018-03-02 06:24:10
3.获得某给定日期字符串的datetime对象
import datetime
dateStr = '2018-03-02 06:24:10'
datetimeObj = datetime.datetime.strptime(dateStr, "%Y-%m-%d %H:%M:%S")
print(type(datetimeObj))
# 注:将字符串日期转换为datetime后可以很高效的进行统计操作,因为转换为datetime后,
# 可以通过datetime.timedelta()方法来前后移动时间,效率很高,而且可读性很强。
输出:
<class 'datetime.datetime'>
4.获得某给定两个datetime之间的差距
import datetime
a = datetime.datetime(2014,12,4,1,59,59)
b = datetime.datetime(2014,12,4,3,59,59)
diffSeconds = (b-a).total_seconds()
print(diffSeconds)
输出:
7200.0
5.将时间元组 struct_time 转化为时间戳
In [56]: datetime.datetime.now()
Out[56]: datetime.datetime(2014, 8, 15, 9, 57, 52, 779893)
In [57]: datetime.datetime.now().timetuple()
Out[57]: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=15, tm_hour=9, tm_min=58, tm_sec=12, tm_wday=4, tm_yday=227, tm_isdst=-1)
In [58]: time.mktime(datetime.datetime.now().timetuple())
Out[58]: 1408067904.0
6.将时间字符串转换为时间元组struct_time
In [73]: time.strftime('%Y-%m-%d %H:%M:%S')
Out[73]: '2014-08-15 10:27:36'
In [74]: time.strptime('2014-08-15 10:27:36','%Y-%m-%d %H:%M:%S')
Out[74]: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=15, tm_hour=10, tm_min=27, tm_sec=36, tm_wday=4, tm_yday=227, tm_isdst=-1)
其他用法:http://qinxuye.me/article/details-about-time-module-in-python/
参考资料:
老王python: http://www.cnpythoner.com/post/89.html
时间字字符串和时间戳的转换:http://fcamel-life.blogspot.jp/2010/11/python.html
python时间相互转换:http://blog.sina.com.cn/s/blog_b09d460201018o0v.html
Date and Time Representation in Python:http://www.seehuhn.de/pages/pdate
strptime和strftime相互转换:http://blog.libears.com/2011-08-16/python/strptime%E5%92%8Cstrftime
python时间,日期,时间戳处理: http://blog.csdn.net/xiaobing_blog/article/details/12591917
菜鸟教程:http://www.runoob.com/python/python-date-time.html