赞
踩
datetime模块专门用于时间和日期的处理
常用的功能有以下几个:
-
-
- 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
-
-
- 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
-
接收以时间元组,并返回以可读字符串表示的当地时间,格式由参数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天
- '''
在编写代码时,往往涉及时间、日期、时间戳的相互转换。
- # 引入模块
- import time, datetime
- # 字符类型的时间
-
- 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
- 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
- ======================
-
- """
- # 使用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
-
- 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
- """
这里说的字符串不是一般意义上的字符串,是指在读取日期类型的数据时,如果还没有及时解析字符串,它就还不是日期类型,那么此时的字符串该怎么与时间戳之间进行转换呢?
表示日期时间常用三种形式:
秒为单位的浮点数
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]
- """
-
好文章,我 在看❤
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。