Python 之 Pandas 时间函数 time 、datetime 模块和时间处理基础

news2024/10/7 18:28:06

文章目录

  • 一、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()
#1676978808.2162082
  • 将其转化为整型数据。
int(time.time())
#1676978809 
  • 我们可以知道一个程序消耗的时间,通过设置程序开始时间和程序结束时间,中间执行一个循环语句,这里以累加到 10000 为例。
start_time = time.time() 
s = "" 
for i in range(10000):     
s += str(i) ​ 
end_time = time.time()print("程序消耗时间=",end_time-start_time) 
#程序消耗时间= 0.0039615631103515625 
  • 我们也可以通过 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) 
#time.struct_time(tm_year=2023, tm_mon=2, tm_mday=21, tm_hour=19, tm_min=26, tm_sec=58, #tm_wday=1, tm_yday=52, tm_isdst=0) 
#2023 
#2 
#21 
  • 我们可以将 timsstamp 转化为 struct_time。
time.localtime(1650177058) 
#time.struct_time(tm_year=2022, tm_mon=4, tm_mday=17, tm_hour=14, tm_min=30, tm_sec=58, #tm_wday=6, tm_yday=107, tm_isdst=0) 
  • 可以将格式化字符串输入到 struct_time。
time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X') 
#time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6, #tm_wday=3, tm_yday=125, tm_isdst=-1) 
  • 我们也可以将格式化字符串时间反向转变为秒钟数。
time.mktime(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X')) 
#1304584626.0 
  • 我们可以生成 format_time,产生满足我们格式要求的时间。
  • 示例 1:
#struct_time to format_time time.strftime("%Y-%m-%d %X") 
time.strftime("%Y-%m-%d %X",time.localtime()) 
#time.strftime("%Y-%m-%d %X",time.localtime())
#'2023-02-21 19:27:05' #生成format_time 
  • 示例 2:
#struct_time to format_time 
time.strftime("%Y-%m-%d") 
#time.strftime("%Y-%m-%d %X",time.localtime())
#'2023-02-21'
  • 示例 3:
#struct_time to format_time 
time.strftime("%m-%d-%Y") 
#time.strftime("%Y-%m-%d %X",time.localtime())
#'02-21-2023'

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}工作"
#2011 
#5 
#7 
#16 
#37 
#'我们在家里工作'

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)
  • 常见的结构化时间组合有如下几种:
  • 示例 1:
time.strftime("%Y-%m-%d %X")
#'2023-02-21 20:55:40'
  • 示例 2:
time.strftime("%Y-%m-%d")
#'2023-02-21'
  • 示例 3:
time.strftime("%m")
#'02'
  • 我们可以通过 time 运算获取我们想要的时间点,并按 %Y-%m-%d %X 的形式表达出来。
import time 
t1 = time.time() 
t2=t1+24*60*60  
time.strftime("%Y-%m-%d %X",time.localtime(t2))
#'2023-02-22 21:02:38'
  • 或者通过 time 进行暂停操作,例如火箭发射,我们在循环结束后暂停 1s,然后进行下一个语句。
# 倒计时 
for i in range(5):
     print('\r',' %s 秒!' % (5-i), end='')
     # 暂停1s后运行     
     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()))
#date.today(): 2023-02-21 
#date.fromtimestamp(): 2023-02-21
  • 示例 2:
from datetime import date 
print(type(date.fromtimestamp(1650177058))) 
print(date.fromtimestamp(1650177058))
#<class 'datetime.date'> 
#2022-04-17

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))
#2023-02-01
  • 示例 2:同示例 1,但是换了一种函数写法。
date.today().replace(day=1)
#datetime.date(2023, 2, 1)
  • 示例 3:直接使用 now 函数生成当前日期。
now 
#datetime.date(2023, 2, 21)
  • 示例 4:直接使用 now.isoformat() 函数生成 YYYY-MM-DD 格式的当前日期。
now.isoformat() 
#'2023-02-21'
  • 示例 5:直接使用 now.isoweekday() 函数生成周几,返回对应的数字。
now.isoweekday() 
#2 
  • 示例 6:使用 now.strftime() 函数自定义输出格式。
#'2022.04.18'  自定义输出格式 
now.strftime('%Y.%m.%d') 
#'2023.02.21'
  • 示例 7:
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")) 
#2021 10 26 
#now: 2021-10-26 , 当月第一天: 2021-10-01 
#timetuple(): time.struct_time(tm_year=2021, tm_mon=10, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=299, tm_isdst=-1) 
#weekday(): 1 
#isoweekday(): 2 
#isoformat(): 2021-10-26 
#strftime(): 2021.10.26

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'))
#<class 'datetime.datetime'> 
#2023-02-21 21:45:25 
#2023-02-21 21:45
  • 对于 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')
#2021-11-10 10:23:00 
#datetime.datetime(2021, 11, 10, 10, 23)
  • 汇总一下,见下方例子。
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"))  
#today(): 2023-02-21 21:45:28.141748 
#now(): 2023-02-21 21:45:28.141748 
#fromtimestamp(tmstmp): 2023-02-21 21:45:28.141748 
#datetime.strptime(date_string, format): 2022-03-21 00:00:00

三、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)
#dt3: 2023-02-20 22:11:28.388926 
#dt_11: 2023-02-20 22:11:28.388926 
#dt3: 2023-02-22 22:11:28.388926
  • 示例 2(可以使用 s.total_seconds 返回在该时间实例的给定持续时间内覆盖的总秒数 ):
# 明天的datetime  - 昨天的datetime 
s= dt3 - dt_1 
print(s.days) 
print(s.total_seconds())
#2 
#172800.0
  • 示例 3:
delta_obj = dt3-dt 
print(type(delta_obj),delta_obj)#<type 'datetime.timedelta'> 1 day, 0:00:00 
# total_seconds():返回在该时间实例的给定持续时间内覆盖的总秒数 
print(delta_obj.days ,delta_obj.total_seconds())#1 86400.0
#<class 'datetime.timedelta'> 1 day, 0:00:00 
#1 86400.0

四、时间处理基础

  • 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)DateOffsetNoneNoneDateOffset()
  • 一般情况下,时间序列主要是 SeriesDataFrame 的时间型索引,可以用时间元素进行操控。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/362775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring架构篇--2.4 远程通信基础--Socket通信

前言&#xff1a;通信中我们常常建立socket 通过其tcp完成通信&#xff1b; 1 Socket 介绍&#xff1a; 所谓socket 通常也称作”套接字“&#xff0c;用于描述IP地址和端口&#xff0c;是一个通信链的句柄。应用程序通常通过”套接字”向网络发出请求或者应答网络请求&#…

四色菊皇家大学-BCG U2T产品宣传活动

BCG U2T产品的宣传和介绍。 2023年2月16日&#xff0c;四色菊皇家大学艺术文化中心&#xff0c;高等教育、科学、研究和创新部长Dnuch Tantodtit博士主持了BCG U2T产品的市场推广项目。四色菊皇家大学校长Saksit Anganaphanayakorn博士&#xff0c;以及U2T项目的管理人员、教职…

Ubuntu16.04使用apache创建个人用户主页并添加口令认证

文章目录一.安装apache二、apache文件和目录简述2.1 网站数据目录2.2 Apache配置文件三、创建个人用户主页3.1 开启个人用户主页功能3.2 建立目录和首页面3.3 开启模块3.4 测试四、添加口令认证4.1 生成密码数据库4.2 修改配置文件一.安装apache 创建虚拟机&#xff0c;保持默…

代码随想录【Day21】| 530. 二叉搜索树的最小绝对差、501. 二叉搜索树中的众数、236. 二叉树的最近公共祖先

530. 二叉搜索树的最小绝对差 题目链接 题目描述&#xff1a; 给你一棵所有节点为非负值的二叉搜索树&#xff0c;请你计算树中任意两节点的差的绝对值的最小值。 示例&#xff1a; 提示&#xff1a;树中至少有 2 个节点。 难点&#xff1a; 解答错误&#xff01;仅考虑了…

2023年软件测试工程师怎样跳槽,才能越跳越值钱?

2023年就业难&#xff1f;可那个转行干软件测试的小哥哥才刚拿到2W薪资的offer&#xff0c;紧接着又跳槽去了大厂 作为软件测试工程师怎样跳槽才能越跳越值钱呢&#xff1f; 把控好跳槽频次 我们在编写简历的时候&#xff0c;总想尽可能展示出自己的技能&#xff0c;但是简历上…

【基础算法】数的范围

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…

尚医通 (二十一)预约下单

目录一、预约下单功能(一)1、需求2、搭建订单模块3、封装Feign调用获取就诊人接口4、封装Feign调用获取排班下单信息接口二、预约下单功能(二)1、实现生成订单接口三、预约下单功能(三)四、预约下单功能(四)1、生成订单后处理逻辑-封装短信接口2、生成订单后处理逻辑-更新排班数…

Allegro误删器件位号如何快速刷新回来操作指导

Allegro误删器件位号如何快速刷新回来操作指导 在用Allegro做PCB设计的时候,有时会因为误操作,把需要的丝印位号删除了,如果想把位号复原回来,可以把当前器件删除,再重新放置即可。 下面介绍在不删除器件的情况下也能快速刷新回来的方法 如下图 误操作前 误操作后,位号…

Vue3+Ts+Vite开发插件并发布到npm

依赖版本信息如下&#xff1a; "vue": "^3.2.45""typescript": "~4.7.4""vite": "^4.0.0""less": "^4.1.3""terser": "^5.16.4"npm: 8.1.0node: 16.13.0 目标&#xf…

Spring AOP(AOP概念、组成、Spring AOP实现及实现原理)

文章目录1. Spring AOP 是什么2. 为什么要用 AOP3. 怎么学 Spring AOP4. AOP 组成5. Spring AOP 实现5.1 添加 Spring AOP 框架支持5.2 定义切面和切点5.3 实现通知方法5.4 使⽤ AOP 统计 UserController 每个⽅法的执⾏时间 StopWatch5.4 切点表达式说明 AspectJ6. Spring AOP…

【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

Qt-FFmpeg开发-实现录屏功能(10)

#音视频/FFmpeg #Qt Qt-FFmpeg开发-实现录屏功能&#x1f4ac; 文章目录Qt-FFmpeg开发-实现录屏功能&#x1f4ac;1、概述&#x1f4a5;2、实现效果&#x1f4a8;3、FFmpeg录屏代码流程&#x1f441;️‍&#x1f5e8;️4、主要代码&#x1f919;5、完整源代码&#x1f90f;更…

Doris单机部署

文章目录1. 前言2. 安装3. 启动4. 使用1. 前言 Apache Doris 是一款现代 MPP (Massively Parallel Processing大规模并行处理) 的分布式 SQL 分析数据库&#xff0c;所谓分析数据库就是将其数据集分布在许多机器或节点上&#xff0c;以处理大量数据&#xff0c;采用 Apache 2.0…

几十亿工单表,查询优化案例

前言: 之前在某大型保险公司担任技术经理&#xff0c;负责优化话务系统模块&#xff0c;由于系统已经运行10年之久&#xff0c;尤其在话务系统中&#xff0c;沉积了几十亿的话务信息表&#xff0c;业务人员反馈&#xff0c;话务系统历史数据查询部分已经完全查询不动&#xff0…

Spring Cloud Nacos源码讲解(二)- Nacos客户端服务注册源码分析

Nacos客户端服务注册源码分析 服务注册信息 ​ 我们从Nacos-Client开始说起&#xff0c;那么说到客户端就涉及到服务注册&#xff0c;我们先了解一下Nacos客户端都会将什么信息传递给服务器&#xff0c;我们直接从Nacos Client项目的NamingTest说起 public class NamingTest…

less、sass、webpack(前端工程化)

目录 一、Less 1.配置less环境 1.先要安装node&#xff1a;在cmd中&#xff1a;node -v检查是否安装node 2.安装less :cnpm install -g less 3.检查less是否安装成功&#xff1a;lessc -v 4.安装成功后&#xff0c;在工作区创建xx.less文件 5.在控制台编译less,命令&…

Spring Cloud——流监控Dashboard

一、编写三个module 1. springcloud-consumer-hystrix-dashboard 1.导入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId><version>1.4.6.RELEASE</version>…

【服务器数据恢复】raid5磁盘阵列硬盘离线的数据恢复案例

服务器数据恢复环境&#xff1a; 某公司一台服务器组建了一组raid5磁盘阵列&#xff0c;作为共享存储池使用。该服务器存储数据库文件和普通文件。 服务器故障&检测&#xff1a; RAID5磁盘阵列的硬盘掉线导致服务器操作系统识别不到D分区。管理员重启了服务器&#xff0c;服…

如何发布新闻稿,包含编写新闻稿、发布渠道

发布新闻稿是一种重要的传播方式&#xff0c;它可以让公众了解你的新闻&#xff0c;并提高新闻的知名度和可信度。在这篇文章中&#xff0c;我将详细介绍如何发布新闻稿&#xff0c;包括选择发布渠道、编写新闻稿、发布新闻稿和推广新闻稿等方面的内容。1、选择发布渠道在发布新…

VirtualBox压缩VDI文件 VDI文件瘦身方法(cenos7)

virtualbox虚拟机运行久了之后就会发现&#xff0c;磁盘镜像vdi文件越来越大。即使你把虚拟机中的大文件删除&#xff0c;这个vdi文件占用的空间还是不变。也就是说动态扩展的vdi文件只会大&#xff0c;不会小。那么大的文件对于备份和分享都不是很方便&#xff0c;所以有必要的…