Python时间和日期
datetime模块专门用于时间和日期的处理
常用的功能有以下几个:
datetime.now() & datetime.today()
import datetime
print(datetime.datetime.now())
# datetime.today()
#2020-09-21 23:13:05.245157
print(datetime.datetime.today())
#2020-09-21 23:13:57.062886
datetime.strptime()
print(datetime.datetime.strptime('2020/08/09',format('%Y/%m/%d')))
#2020-08-09 00:00:00
print(datetime.datetime.strptime('20-08-09',format('%y-%m-%d')))
#2020-08-09 00:00:00
datetime.strftime()
接收以时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定。
dt = datetime.datetime.now()
print("======================")
print('时间:(%Y-%m-%d %H:%M:%S %f): ',dt.strftime( '%Y-%m-%d %H:%M:%S %f' ) )
print('时间:(%Y-%m-%d %H:%M:%S %p): ' , dt.strftime( '%y-%m-%d %I:%M:%S %p' ) )
print('星期缩写%%a: %s ' % dt.strftime( '%a' ))
print('星期全拼%%A: %s ' % dt.strftime( '%A' ))
print('月份缩写%%b: %s ' % dt.strftime( '%b' ) )
print('月份全批%%B: %s ' % dt.strftime( '%B' ))
print('日期时间%%c: %s ' % dt.strftime( '%c' ) )
print('今天是这周的第%s天 ' % dt.strftime( '%w' ) )
print( '今天是今年的第%s天 ' % dt.strftime( '%j' ))
print('今周是今年的第%s周 ' % dt.strftime( '%U' ) )
print('今天是当月的第%s天 ' % dt.strftime( '%d' ))
'''
======================
时间:(%Y-%m-%d %H:%M:%S %f): 2020-09-21 23:30:51 573645
时间:(%Y-%m-%d %H:%M:%S %p): 20-09-21 11:30:51 PM
星期缩写%a: Mon
星期全拼%A: Monday
月份缩写%b: Sep
月份全批%B: September
日期时间%c: Mon Sep 21 23:30:51 2020
今天是这周的第1天
今天是今年的第265天
今周是今年的第38周
今天是当月的第21天
'''
时间日期的应用场景
1.简介
在编写代码时,往往涉及时间、日期、时间戳的相互转换。
2.示例
# 引入模块
import time, datetime
2.1 str类型的日期转换为时间戳
# 字符类型的时间
testStr = '2020-09-21 23:26:33'
# 转为 时间数组
timeArray = time.strptime(testStr, "%Y-%m-%d %H:%M:%S")
print(timeArray)
# timeArray可以调用tm_year等
print(timeArray.tm_year) # 2020
# 转为时间戳
timeStamp = int(time.mktime(timeArray))
print(timeStamp) # 1600701993
# 结果如下
time.struct_time(tm_year=2020, tm_mon=9, tm_mday=21, tm_hour=23, tm_min=26, tm_sec=33, tm_wday=0, tm_yday=265, tm_isdst=-1)
2020
1600701993
2.2 更改str类型日期的显示格式
testStr1 = "2020-09-21 23:40:00"
# 转为数组
timeArray = time.strptime(testStr1, "%Y-%m-%d %H:%M:%S")
# 转为其它显示格式
otherStyleTime = time.strftime("%Y/%m/%d %H:%M:%S", timeArray)
print (otherStyleTime)
tss3 = "2020/09/21 23:40:00"
timeArray = time.strptime(tss3, "%Y/%m/%d %H:%M:%S")
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
print (otherStyleTime)
"""
-----------------------
2020/09/21 23:40:00
2020-09-21 23:40:00
======================
"""
2.3 时间戳转换为指定格式的日期
# 使用time
timeStamp = 1600701993
timeArray = time.localtime(timeStamp)
otherStyleTime = time.strftime("%Y--%m--%d %H:%M:%S", timeArray)
print(otherStyleTime) # 2020--09--21 23:26:33
# 使用datetime
timeStamp = 1600101993
dateArray = datetime.datetime.fromtimestamp(timeStamp)
otherStyleTime = dateArray.strftime("%Y--%m--%d %H:%M:%S")
print(otherStyleTime) # 2020--09--15 00:46:33
# 使用datetime,指定utc时间,相差8小时
timeStamp = 1600201993
dateArray = datetime.datetime.utcfromtimestamp(timeStamp)
otherStyleTime = dateArray.strftime("%Y--%m--%d %H:%M:%S")
print(otherStyleTime) # 2020--09--15 20:33:13
2.4 获取当前时间并且用指定格式显示
print("+++++++++++++++++++++++++++++++++++++++++++")
# time获取当前时间戳
now = int(time.time()) # 1533952277
timeArray = time.localtime(now)
print (timeArray)
otherStyleTime = time.strftime("%Y--%m--%d %H:%M:%S", timeArray)
print (otherStyleTime)
# 结果如下
"""
time.struct_time(tm_year=2020, tm_mon=9, tm_mday=21, tm_hour=23, tm_min=45, tm_sec=53, tm_wday=0, tm_yday=265, tm_isdst=0)
2020--09--21 23:45:53
"""
# datetime获取当前时间,数组格式
now = datetime.datetime.now()
print (now)
otherStyleTime = now.strftime("%Y--%m--%d %H:%M:%S")
print (otherStyleTime)
# 结果如下:
"""
2020-09-21 23:45:53.543487
2020--09--21 23:45:53
"""
日期函数 time模块函数
这里说的字符串不是一般意义上的字符串,是指在读取日期类型的数据时,如果还没有及时解析字符串,它就还不是日期类型,那么此时的字符串该怎么与时间戳之间进行转换呢?
表示日期时间常用三种形式:
秒为单位的浮点数
struct_time 元组
时间字符串
import time; # 引入time模块
ticks = time.time()
print ("当前时间戳为:", ticks)
当前时间戳为: 1600704429.9781017
秒为单位的浮点数 转换为 时间元组
tm_struct = time.localtime(ticks)
print(tm_struct)
time.struct_time(tm_year=2020, tm_mon=9, tm_mday=22, tm_hour=0, tm_min=8, tm_sec=2, tm_wday=1, tm_yday=266, tm_isdst=0)
有时我们需要得到 格林威治时间,那么可以用time.gmtime() 函数:
#格林威治时间
print(time.gmtime(ticks))
time.struct_time(tm_year=2020, tm_mon=9, tm_mday=21, tm_hour=16, tm_min=9, tm_sec=18, tm_wday=0, tm_yday=265, tm_isdst=0)
时间元组转换为秒为单位的浮点数
print(time.mktime(tm_struct))
1600704621.0
时间元组转换为时间字符串
转换方法有很多,最简单的是 asctime():
time_str = time.asctime( tm_struct )
print(time_str)
"""
Tue Sep 22 00:12:14 2020
"""
如果要精确控制格式,我们可以使用 strftime():
tm_1=time.strftime("%Y-%m-%d %H:%M:%S", tm_struct)
tm_2=time.strftime("%a %b %d %H:%M:%S %Y", tm_struct)
print(tm_1)
print(tm_2)
"""
2020-09-22 00:14:13
Tue Sep 22 00:14:13 2020
"""
时间字符串 转换为 时间元组
函数 time.strptime() 可以完成这个转换,下面是个例子
tm2_struct = time.strptime('2020-09-22 01:34:50', "%Y-%m-%d %H:%M:%S")
print(tm2_struct)
"""
time.struct_time(tm_year=2020, tm_mon=9, tm_mday=22, tm_hour=1, tm_min=34, tm_sec=50, tm_wday=1, tm_yday=266, tm_isdst=-1)
"""
秒为单位的浮点数 转换为 时间字符串
time.ctime() 类似于 time.asctime(), 请看下面的例子:
tm_3=time.ctime(ticks)
print(tm_3)
"""
Tue Sep 22 00:17:54 2020
"""
#如果想精确控制输出的字符串,我没查到有现成的函数。估计只能先转成元组,然后在格式化成字符串。
#小编写了个转换函数:
def time2str(ticks, fmt='%a %b %d %H:%M:%S %Y'):
tm = time.localtime(ticks)
return time.strftime(fmt, tm)
时间字符串 转换为 秒为单位的浮点数
def str2time(str, fmt='%a %b %d %H:%M:%S %Y'):
tm = time.strptime(str, fmt)
return time.mktime(tm)
# 这里也是参考函数
作业练习
根据起始和终止日期生成中间日期
pandas.to_datetime(arg,errors ='raise',utc = None,format = None,unit = None )将字符串转换为日期函数
#转换时间字符串格式,方法二:
import pandas as pd
start = pd.to_datetime("20200922")
print("===================================")
print(start)
s=start.strftime('%Y-%m-%d') # 将datetime转为字符串,并以'%Y-%m-%d'格式输出
print(s)
print("===================================")
"""
==================================
2020-09-22 00:00:00
2020-09-22
==================================
"""
编写函数:
import time; # 引入time模块
from pandas import DatetimeIndex
def date_range(cls, start=None, end=None, periods=None, freq=None, input_format=None, out_format=None):
"""
生成时间序列
:param start: 序列开始时间
:param end: 序列结束时间, 给定start时, 结束时间包含end
:param periods: int, 生成的时间序列长度
:param freq: 要生成时间序列的时间间隔
:param out_format: 是否输出格式化后的字符串, 若要输出可指定输出格式. "%Y-%m-%d %H:%M:%S"
:param input_format: 若start或end是字符串且无法自动推断时间格式则需指定格式
:return: [date or date_str]
"""
start = pd.to_datetime("20200918")
end = pd.to_datetime("20200922")
pd.date_range(start, end)
DatetimeIndex(['2020-09-28', '2020-09-29', '2020-09-30', '2020-09-13', '2020-06-01', '2020-06-02'])
例题1:
#例1:
dates = ["20200912","20200922"]
def create_dates(dates):
"""
:param dates: ["20200912","20200922"]
:return:
"""
start = pd.to_datetime(dates[0])
end = pd.to_datetime(dates[1])
dates = pd.date_range(start, end) # 生成时间字符串列表
dates = dates.strftime('%Y%m%d') #格式化时间数据
return list(dates)
print("例1")
print(create_dates(dates))
"""
例1
['20200912', '20200913', '20200914', '20200915', '20200916', '20200917', '20200918', '20200919', '20200920', '20200921', '20200922']
"""
例题2:
#例2
df = pd.DataFrame({'year': [2019, 2020],
'month': [2, 3],
'day': [4, 5]})
pd.to_datetime(df)
print("例2")
print(pd.to_datetime(df))
"""
例2
0 2019-02-04
1 2020-03-05
dtype: datetime64[ns]
"""
![](https://i-blog.csdnimg.cn/blog_migrate/b1e98ad787d891b42fb6e8f0a8ff8ec6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3b0c7c709766220e18c8cd1f0607c24e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/83a0e7eb31f4c29120a072e08c82ecdc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2e78513f4ba435e92396fe8fa67bc04d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/52dbefc3b69bc9b4a202569fbf592c4f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/239597157bcc54ec414a3b3ce6a224cc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f7f113cfc1a2a4730c7b54796374a458.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0344ec45196dbe388c97a99dd3c12dda.png)
![](https://i-blog.csdnimg.cn/blog_migrate/23dde6282d2cf7a71387c510c572db1e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6df6eb9ce663a4bf617708bfd766f95d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/44e4fcc612c8a2e32a8a2ef388c74e6f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1a329d3ed392ebb2eacc105ea3530e8b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6870ac172c2c26c56cc97cada8565049.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5cdd086784f4a4c92786649c2e651873.png)
![](https://i-blog.csdnimg.cn/blog_migrate/651590166c72a3f6bdb3b95d534effd9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e66c004c45f8c6229697ef6f4f7522e5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/962406867a8978d707a4ffd4a6d47e76.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9e79d1e1e13081c198afc436106e89bc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a5e0971e77a0afc383b010d591c6a91a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a031f5a2706d21213b5e4eea2e80734a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6f4aa21eb58936e19abd0d63a1aef2d9.png)
好文章,我 在看❤