=NOW()
可以利用datetime
库
from datetime import datetime
t=datetime.now()
print(t)
# 2022-08-06 11:59:53.297652
datetime.datetime
对象=YEAR(NOW())
=MONTH(NOW())
=DAY(NOW())
=HOUR(NOW())
=MINUTE(NOW())
=SECOND(NOW())
访问datetime.datetime
对象的year
,month
,day
,hour
,minute
,second
属性
t=datetime.now()
print(t.year)
# 2022
print(t.month)
# 8
print(t.day)
# 6
print(t.hour)
# 13
print(t.minute)
# 37
print(t.second)
# 34
=WEEKDAY(NOW(),2) # 返回今天周几。
=WEEKNUM(NOW(),2) # 返回今天是全年的第几周。后面的数字设置周几为一周的第一天。1代表周日。2代表周一
t=datetime.now()
print(t.weekday()+1) # 返回今天周几。由于Python从0开始计数,所以要加1
# 6
print(t.isocalendar()) # 返回今天是哪年的第几周的第几天。
# datetime.IsoCalendarDate(year=2022, week=31, weekday=6)
print(t.isocalendar()[1]) # 可以通过数字索引访问返回的对象
# 31
选中要设置格式的区域,右键"设置单元格格式",调出格式设置界面。
“数字”>选择"日期"/"时间"的格式
date()
返回datetime.date
对象,只显示日期:
t=datetime.now()
print(t.date())
# 2022-08-06
time()
返回datetime.time
对象,只显示时间:
t=datetime.now()
print(t.time())
# 13:47:42.966525
strftime()
返回时间字符串,可以根据占位符的方式设置时间显示方式:
占位符 | 含义 |
---|---|
%y | 2位数年份 |
%Y | 4位数年份 |
%m | 月份 |
%d | 当月的第几天 |
%I | 12小时制小时数 |
%H | 24小时制小时数 |
%M | 分钟数 |
%S | 秒数 |
如:
t=datetime.now()
str_t=t.strftime("%Y年%m月%d日 %H:%M:%S")
print(t)
# 2022年08月06日 14:02:51
可以利用str
函数或strftime
方法
t = datetime.now()
print(type(t))
#
str1 = str(t)
print(f"{type(str1)} {str1}")
# 2022-08-06 14:08:28.817562
str2 = t.strftime("%Y年%m月%d日 %H:%M:%S")
print(f"{type(str2)} {str2}")
# 2022年08月06日 14:08:28
利用dateutil.parser
模块的parse
方法,它能解析标准的类似时间格式的字符串
如:
from dateutil.parser import parse
str_time = "2022-8-6 09:08:07"
parsed_time = parse(str_time)
print(f"{type(parsed_time)} {parsed_time}")
# 2022-08-06 09:08:07
利用timedate.strptime
函数,它能将已知格式的字符串转化为datetime
对象
如:
str_time="2022年08月06日 14:08:28"
newtime=datetime.strptime(str_time,"%Y年%m月%d日 %H:%M:%S")
print(f"{type(newtime)} {newtime}")
# 2022-08-06 14:08:28
筛选时有"时间筛选"选项:
创建时间索引可以通过pd.DatetimeIndex()
类
如:
time_index=pd.DatetimeIndex([
'2008-12-12', '2008-12-16', '2009-01-01', '2007-06-07', '2008-11-02',
'2009-09-10'
])
df = pd.DataFrame({'销量': [100, 200, 300, 400, 350, 120]}, index=time_index)
print(df)
"""
销量
2008-12-12 100
2008-12-16 200
2009-01-01 300
2007-06-07 400
2008-11-02 350
2009-09-10 120
"""
print(df.index)
"""
DatetimeIndex(['2008-12-12', '2008-09-16', '2009-01-01', '2007-06-07',
'2008-11-02', '2009-09-10'],
dtype='datetime64[ns]', freq=None)
"""
可以通过特定年月日来筛选指定日期索引到的行
如:
print(df.loc['2008']) # 某年
"""
销量
2008-12-12 100
2008-12-16 200
2008-11-02 350
"""
print(df.loc['2008-12']) # 某年某月
"""
销量
2008-12-12 100
2008-12-16 200
"""
print(df.loc['2009-01-01']) #某年某月某日
"""
销量 300
Name: 2009-01-01 00:00:00, dtype: int64
"""
print(df.loc['2008-10':'2009-10']) #支持切片
"""
销量
2008-12-12 100
2008-12-16 200
2009-01-01 300
2008-11-02 350
2009-09-10 120
"""
如果时间序列不是行索引而是数据列,则可以通过布尔索引来进行时间筛选。
如:
df = pd.DataFrame({
"日期": [
'2008-12-12', '2008-012-16', '2009-01-01', '2007-06-07', '2008-11-02',
'2009-09-10'
],
"销量": [100, 200, 300, 400, 350, 120]
})
df["日期"] = df["日期"].astype("datetime64")
new_df = df[(df["日期"] > datetime(2008, 10, 1))
& (df["日期"] < datetime(2009, 10, 30))]
print(new_df)
"""
日期 销量
0 2008-12-12 100
1 2008-12-16 200
2 2009-01-01 300
4 2008-11-02 350
5 2009-09-10 120
"""
在Excel
中直接对两个日期作差,将会得到一个小数。它的整数部分表示两者相差天数。它的小数部分乘24取整得到相差的剩余小时,取余再乘60取整得到相差的剩余分钟,取余再乘60取整得到相差的剩余秒。
在Python中对两个datetime.datetime
对象作差,将得到一个timedelta
对象。通过访问它的days
,seconds
属性可以获取两个时间相差几天零几秒
delta_t=datetime(2022,10,1,14,8,8)-datetime(1949,10,1,10,10,10)
print(f"{type(time_delta)} {time_delta}")
# 26663 days, 3:57:58
print(delta_t.days)
# 26663
print(delta_t.seconds)
# 14278
时间偏移是指,让时间加减一个时间变化量
在Excel中,日期运算是以天为单位的。如果要偏移其他单位的时间,就需要先转化成小数形式的天数再来相加减。
timedelta
对象可以帮助我们以天,秒,毫秒的单位来偏移时间:
from datetime import timedelta
t=datetime.now()
print(t)
# 2022-08-06 16:14:44.784553
print(t+timedelta(days=1,seconds=3600))
# 2022-08-07 17:14:44.784553
print(t-timedelta(days=2,seconds=7200))
# 2022-08-04 14:14:44.784553
可以利用pandas.tseries.offsets
模块中的Day
,Hour
,Minute
,Second
对象来十分方便地进行时间偏移。
如:
from pandas.tseries.offsets import Day,Hour,Minute,Second
t=datetime.now()
print(t)
# 2022-08-06 16:19:58.241954
print(t+Day(1)+Hour(1)+Minute(11)+Second(12))
# 2022-08-07 17:31:10.241954
print(t-Day(1)-Hour(1)-Minute(11)-Second(12))
# 2022-08-05 15:08:46.241954