文章目录
- 一、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
的时间型索引,可以用时间元素进行操控。