文章目录
一、time 模块 1、时间格式转换图 2. struct_time 元组元素结构 3. format time 结构化表示
二、datetime 模块 1. date类 2. 方法和属性 3. datetime 类
三、timedelta 类的时间加减 四、时间处理基础
Python 中提供了对时间日期的多种多样的处理方式,主要是在 time 和 datetime 这两个模块里。
一、time 模块
time 模块不牵扯时区的问题,便于计算。 (1) timestamp 时间戳,时间戳表示的是从 1970 年 1 月 1 日 00:00:00 开始按秒计算的偏移量。 (2) struct_time 时间元组,共有九个元素组。 (3) format time 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。
1、时间格式转换图
主要 time 生成方法和 time 格式转换方法实例如下: 首先,我们导入 time 模块,便于我们后续的操作。
import time
然后,我们生成 timestamp ,他是一个浮点型数据。
time. time( )
int ( time. time( ) )
我们可以知道一个程序消耗的时间,通过设置程序开始时间和程序结束时间,中间执行一个循环语句,这里以累加到 10000 为例。
start_time = time. time( )
s = ""
for i in range ( 10000 ) :
s += str ( i)
end_time = time. time( )
print ( "程序消耗时间=" , end_time- start_time)
我们也可以通过 time 模块调用本地时间,通过生成 struct_time 完成。
my_time = time. localtime( )
print ( my_time)
print ( my_time. tm_year)
print ( my_time. tm_mon)
print ( my_time. tm_mday)
我们可以将 timsstamp 转化为 struct_time。
time. localtime( 1650177058 )
可以将格式化字符串输入到 struct_time。
time. strptime( '2011-05-05 16:37:06' , '%Y-%m-%d %X' )
time. mktime( time. strptime( '2011-05-05 16:37:06' , '%Y-%m-%d %X' ) )
我们可以生成 format_time,产生满足我们格式要求的时间。 示例 1:
time. strftime( "%Y-%m-%d %X" , time. localtime( ) )
time. strftime( "%Y-%m-%d" )
time. strftime( "%m-%d-%Y" )
2. struct_time 元组元素结构
属性 值 tm_year(年) xxxx 年,比如 2011 tm_mon(月) 1 - 12 tm_mday(日) 1 - 31 tm_hour(时) 0 - 23 tm_min(分) 0 - 59 tm_sec(秒) 0 - 61 tm_wday(weekday) 0 - 6(0表示周日) tm_yday(一年中的第几天) 1 - 366 tm_isdst(是否是夏令时) 默认为-1
其具体如下作用: (1) 取得时间戳/时间格式的字符串中对应的年/月/日等信息。 (2) 作为时间戳和字符串时间之间的桥梁。 具体可见如下示例:
time_stuct = time. strptime( '2011-05-07 16:37:06' , '%Y-%m-%d %X' )
print ( time_stuct. tm_year)
print ( time_stuct. tm_mon)
print ( time_stuct. tm_mday)
print ( time_stuct. tm_hour)
print ( time_stuct. tm_min)
my = 'aaa'
'%s' % my
my_int = 1
'%d' % my_int
"我们在{}工作" . format ( '家里' )
addr = "家里"
f"我们在 { addr} 工作"
3. format time 结构化表示
属性 含义 %Y -年 [0001,…,2018,2019,…,9999] %m -月 [01,02,…,11,12] %d -天 [01,02,…,30,31] %M -分钟 [00,01,…,58,59] %S -秒 [00,01,…,58,61] %X 本地相应时间 %y 去掉世纪的年份(00 - 99)
time. strftime( "%Y-%m-%d %X" )
time. strftime( "%Y-%m-%d" )
time. strftime( "%m" )
我们可以通过 time 运算获取我们想要的时间点,并按 %Y-%m-%d %X
的形式表达出来。
import time
t1 = time. time( )
t2= t1+ 24 * 60 * 60
time. strftime( "%Y-%m-%d %X" , time. localtime( t2) )
或者通过 time 进行暂停操作,例如火箭发射,我们在循环结束后暂停 1s,然后进行下一个语句。
for i in range ( 5 ) :
print ( '\r' , ' %s 秒!' % ( 5 - i) , end= '' )
time. sleep( 1 )
print ( '\r' , "发射!!!!" )
二、datetime 模块
datatime 模块重新封装了time模块,提供更多接口,提供的类有:date,time,datetime、timedelta,tzinfo 等。
1. date类
datetime. date( year, month, day)
有静态方法和字段两种方法。 date.today():返回一个表示当前本地日期的date对象。 date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象。 具体可见如下示例: 示例 1:
from datetime import date
import time
print ( 'date.today():' , date. today( ) )
print ( 'date.fromtimestamp():' , date. fromtimestamp( time. time( ) ) )
from datetime import date
print ( type ( date. fromtimestamp( 1650177058 ) ) )
print ( date. fromtimestamp( 1650177058 ) )
2. 方法和属性
可以通过 d1 = date(2011,06,03)
生成 date 对象 。 其具体含义可见下述表格。
属性 含义 d1.year 年 d1.month 月 d.day 日 d1.replace(year, month, day) 生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变) d1.timetuple() 返回日期对应的time.struct_time对象 d1.weekday() 返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推 d1.isoweekday() 返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推 d1.isoformat() 返回格式如’YYYY-MM-DD’的字符串 d1.strftime(fmt) 和 time 模块 forma t相同
具体可见如下示例: 示例 1:我们将 day 参数指定为 1。
now = date. today( )
now
print ( now. replace( day= 1 ) )
date. today( ) . replace( day= 1 )
now
示例 4:直接使用 now.isoformat() 函数生成 YYYY-MM-DD
格式的当前日期。
now. isoformat( )
示例 5:直接使用 now.isoweekday() 函数生成周几,返回对应的数字。
now. isoweekday( )
示例 6:使用 now.strftime() 函数自定义输出格式。
now. strftime( '%Y.%m.%d' )
now = date( 2021 , 10 , 26 )
print ( now. year, now. month, now. day)
tomorrow = now. replace( day = 1 )
print ( 'now:' , now, ', 当月第一天:' , tomorrow)
print ( 'timetuple():' , now. timetuple( ) )
print ( 'weekday():' , now. weekday( ) )
print ( 'isoweekday():' , now. isoweekday( ) )
print ( 'isoformat():' , now. isoformat( ) )
print ( 'strftime():' , now. strftime( "%Y.%m.%d" ) )
3. datetime 类
datetime 相当于 date 和 time 结合起来。 其语法模板如下:
datetime. datetime ( year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )
datetime.today():返回一个表示当前本地时间的 datetime 对象。 datetime.now([tz]):返回一个表示当前本地时间的 datetime 对象,如果提供了参数 tz,则获取 tz 参数所指时区的本地时间。 datetime.fromtimestamp(timestamp[, tz]):根据时间戮创建一个 datetime 对象,参数 tz 指定时区信息。 datetime.strptime(date_string, format):将格式字符串转换为 datetime 对象。 我们可以将 datetime 转化为指定格式的字符串。
from datetime import datetime
now = datetime. now( )
print ( type ( now) )
print ( now. strftime( '%Y-%m-%d %X' ) )
print ( now. strftime( '%Y-%m-%d %H:%M' ) )
对于 2021-11-25 10:23 这类的字符串,我们可以使用 strptime 将其转化为 datetime。 需要注意的是,将字符串转化为 datetime 数据类型,格式需要统一。
my_str = '2021-11-10 10:23'
print ( datetime. strptime( my_str, '%Y-%m-%d %H:%M' ) )
my_str = '10/11/2021 10:23'
datetime. strptime( my_str, '%d/%m/%Y %H:%M' )
from datetime import *
import time
now = datetime. now( )
print ( 'today():' , datetime. today( ) )
print ( 'now():' , datetime. now( ) )
print ( 'fromtimestamp(tmstmp):' , datetime. fromtimestamp( time. time( ) ) )
print ( 'datetime.strptime(date_string, format):' , datetime. strptime( '2022-03-21' , "%Y-%m-%d" ) )
三、timedelta 类的时间加减
使用 timedelta 可以很方便的在日期上做天 days,小时 hour,分钟 minute,秒 second,毫秒 millisecond,微秒 microsecond 的时间计算,如果要计算月份则需要另外的办法。 具体可见如下示例。 示例 1(加上 -1 和减 1 是相同的):
from datetime import datetime
from datetime import timedelta
dt = datetime. now( )
dt_1 = dt + timedelta( days= - 1 )
dt_11 = dt - timedelta( days= 1 )
dt3 = dt + timedelta( days= 1 )
print ( "dt3:" , dt_1)
print ( "dt_11:" , dt_11)
print ( "dt3:" , dt3)
示例 2(可以使用 s.total_seconds 返回在该时间实例的给定持续时间内覆盖的总秒数 ):
s= dt3 - dt_1
print ( s. days)
print ( s. total_seconds( ) )
delta_obj = dt3- dt
print ( type ( delta_obj) , delta_obj)
print ( delta_obj. days , delta_obj. total_seconds( ) )
四、时间处理基础
Pandas 提供了四种类型的生成日期时间的对象:日期时间、时间增量、时间跨度、日期偏移量。 (1) 日期时间(Date Times):具有时区支持的特定日期和时间。与 Python 标准库中的 datetime.datetime 类似。如 2020 年 12 月 6 日 13 点 37 分 50 秒. (2) 时间增量(Time Deltas):绝对持续时间,用于在指定时间点基础上增加指定的增量,如在某年月日的基础上增加 2 天、增加 2 个月、减少 4 小时等,最后产生一个新的时间点。 (3) 时间跨度(Time Span):由时间点及其相关周期定义的时间跨度,如连续产生一年四个季度的时间序列。 (4) 日期偏移(Date Offsets):以日历计算的相对持续时间,表示时间间隔,两个时间点之间的长度,如日、周、月、季度、年。
概念 标量类 数组类 Pandas 数据类型 主要建立方法 日期时间(Date Times) Timesstamp 时间戳 DatetimeIndex 时间索引 datetime64[ns]、datetime64[ns,tz] to datetime()、date_range() 时间增量(Time Deltas) Timedelta 时间增量 Timedeltalndex 时间增量索引 timedelta[ns] to timedelta()、timedelta range() 时间跨度(Time Span) Period 时间周期 PeriodIndex 周期索引 period[freq] Period()、period_range() 日期偏移(Date Offsets) DateOffset None None DateOffset()
一般情况下,时间序列主要是 Series
或 DataFrame
的时间型索引,可以用时间元素进行操控。