[python入门(51)] - python时间日期格式time和datetime

news2024/9/28 17:25:48

目录

❤  预备知识

❤  UTC time Coordinated Universal Time

❤  epoch time

❤  timestamp(时间戳)

❤  stamptime时间戳

❤  struct_time时间元组

❤  format time 格式化时间

❤  time模块​编辑

❤  获取当前时间的方法

❤  当传入默认参数时,指的是使用当前时间作为参数值

❤  localtime和gmtime

❤  asctime和ctime

❤  struct_time元组元素结构

❤  常用函数

❤  举例

❤  format time结构化表示:

❤  datetime模块

❤  datetiem模块分类

 ❤  d=datetime.datetime.now() 返回当前的datetime日期类型

 ❤  datetime.date.fromtimestamp() 把一个时间戳转为datetime日期类型

❤  时间运算(datetime.timedelta)

❤  时间替换

❤  date类


在实际开发过程中,我们经常会用到日期或者时间,那么在Python中我们怎么获取时间,以及如何将时间转换为我们需要的格式呢?在之前的开发中,也曾遇到time、datetime等模块下的不同函数,这些函数名又很是相似,几次下来头都昏了,今天来彻底总结梳理一下Python中日期时间获取与格式化。

❤  预备知识

❤  UTC time Coordinated Universal Time

世界协调时,又称格林尼治天文时间、世界标准时间。与UTC time对应的是各个时区的local time,也就是本地时间,例如我们的北京时间

❤  epoch time

表示时间开始的起点;它是一个特定的时间,不同平台上这个时间点的值不太相同,对于Unix而言,epoch time为 1970-01-01 00:00:00 UTC。

❤  timestamp(时间戳)

也称为Unix时间POSIX时间;它是一种时间表示方式,表示从格林尼治时间1970年1月1日0时0分0秒开始到现在所经过的毫秒数,其值为float类型。所谓的时间戳timestamp就是当前时间与格林尼治时间1970年1月1日0时0分0秒之间过了多少秒。

相应的,日期时间就有三种表示方法:

❤  stamptime时间戳

时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。stamptime表现为一个float类型数据。

❤  struct_time时间元组

共有九个元素组,stamptime时间戳和格式化时间字符串之间的转化必须通过struct_time才行

❤  format time 格式化时间

已格式化的结构字符串使时间更具可读性。包括自定义格式固定格式。那么,下面要说的就是怎么获取这三个时间,并进行这三个时间之间的转化

❤  time模块

time模块中,几乎所有时间获取与格式转化的函数都在上图中了,只要理清了这幅图的关系,那么time模块就不再是问题。图中,蓝色方块表示那三种时间格式,箭头表示时间的转化

❤  获取当前时间的方法

使用time.time(),要想获取当前时间,只能通过这个方法,而且获取的是时间戳格式的时间

❤  当传入默认参数时,指的是使用当前时间作为参数值

图中带黄色底纹的都是设有默认值的参数(虽然默认值为None),函数2、3不传入该参数时,系统会自动获取当前时间的时间戳作为该参数值。而函数5则是系统会自动获取当前时间的时间元组作为该参数值,不是不能直接获取当前时间的时间元组吗?是的,但系统会先获取当前时间的时间戳,然后转化为时间元组。上图中只有向左的箭头所代表的函数才有默认值,就是因为向右才能由时间戳转化得到需要的时间格式。

❤  localtime和gmtime

 localtime(函数2)和gmtime(函数3)都可以实现将时间戳转化为时间元组,但是,localtime转化的是本地时间gmtime转为的是世界标准时间

❤  asctime和ctime

asctime(函数7)和ctime(函数8)只能转为%a %b %d %H:%M:%S %Y格式的字符串时间。不传入参数时,用的也是当前时间

❤  struct_time元组元素结构

下标/索引

属性名称

描述

0

tm_year

年份,如 2018

1

tm_mon

月份,取值范围为[1, 12]

2

tm_mday

一个月中的第几天,取值范围为[1-31]

3

tm_hour

小时, 取值范围为[0-23]

4

tm_min

分钟,取值范围为[0, 59]

5

tm_sec

秒,取值范围为[0, 61]

6

tm_wday

一个星期中的第几天,取值范围为[0-6],0表示星期一

7

tm_yday

一年中的第几天,取值范围为[1, 366]

8

tm_isdst

是否为夏令时,可取值为:0 , 1 或 -1,默认值为-1

struct_time属性值的获取方式有两种:

  • 可以把它当做一种特殊的有序不可变序列通过 下标/索引  获取各个元素的值,如t[0]
  • 也可以通过对象名 “t.属性名” 的方式来获取各个元素的值,如t.tm_year。

❤  常用函数

time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
 
time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
 
time.time():返回当前时间的时间戳。
 
time.mktime(t):将一个struct_time转化为时间戳。
 
time.sleep(secs):线程推迟指定的时间运行。单位为秒。
 
time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:'Sun Oct 1 12:04:38 2023'。如果没有参数,将会将time.localtime()作为参数传入。
 
time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
 
time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。

❤  举例

import time

# time模块的方法
# time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
print(time.localtime())
# time.struct_time(tm_year=2023, tm_mon=2, tm_mday=23, tm_hour=13, tm_min=45, tm_sec=37, tm_wday=3, tm_yday=54, tm_isdst=0)

# time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
print(time.gmtime())
# time.struct_time(tm_year=2023, tm_mon=2, tm_mday=23, tm_hour=5, tm_min=45, tm_sec=37, tm_wday=3, tm_yday=54, tm_isdst=0)

# time.time():返回当前时间的时间戳。
print(time.time())
# 1677131137.187028

# time.mktime(t):将一个struct_time转化为时间戳。
a = time.localtime()
print(time.mktime(a))
# 1677131137.0

# time.sleep(secs):线程推迟指定的时间运行。单位为秒。
time.sleep(0.1)
print("hello world")
# hello world

# time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:
# 'Sun Oct 1 12:04:38 2017'。如果没有参数,将会将time.localtime()作为参数传入。
a = time.localtime()
print(time.asctime(a))
# Thu Feb 23 13:45:37 2023

# time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。
# 如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
print(time.ctime())
# Thu Feb 23 13:45:37 2023

# time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)
# 转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。
print(time.strftime("%Y-%m-%d %X", time.localtime()))
# 2023-02-23 13:45:37

# time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
print(time.strftime("2023-02-23 13:45:37"))
# 2023-02-23 13:45:37

❤  format time结构化表示:

格式

含义

%a

本地(locale)简化星期名称

%A

本地完整星期名称

%b

本地简化月份名称

%B

本地完整月份名称

%c

本地相应的日期和时间表示

%d

一个月中的第几天(01 - 31)

%H

一天中的第几个小时(24小时制,00 - 23)

%I

第几个小时(12小时制,01 - 12)

%j

一年中的第几天(001 - 366)

%m

月份(01 - 12)

%M

分钟数(00 - 59)

%p

本地am或者pm的相应符

%S

秒(01 - 61)

%U

一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。

%w

一个星期中的第几天(0 - 6,0是星期天)

%W

和%U基本相同,不同的是%W以星期一为一个星期的开始。

%x

本地相应日期

%X

本地相应时间

%y

去掉世纪的年份(00 - 99)

%Y

完整的年份

%Z

时区的名字(如果不存在为空字符)

%%

‘%’字符

❤  datetime模块

相对于time 模块,datetime模块的接口则更直观,更容易调用

❤  datetiem模块分类

datetime.date:表示日期的类。常用的属性有year, month, day;
datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;
datetime.datetime:表示日期时间。
datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
datetime.tzinfo:与时区有关的相关信息。(这里不详细充分讨论该类,感兴趣的童鞋可以参考python手册)

 ❤  d=datetime.datetime.now() 返回当前的datetime日期类型

d.timestamp(),d.today(), d.year,d.timetuple()等方法可以调

import datetime
d = datetime.datetime.now()
print(d)
# 2023-02-23 13:56:38.310013
d1 = d.time()
print(d1)
# 13:56:38.310013
d2 =d.today()
print(d2)
# 2023-02-23 13:56:38.310014
d3 = d.year
print(d3)
# 2023
d4 = d.timestamp()
print(d4)
# 1677131798.310013
d5 = d.timetuple()
print(d5)
# time.struct_time(tm_year=2023, tm_mon=2, tm_mday=23, tm_hour=13, tm_min=56, tm_sec=38, tm_wday=3, tm_yday=54, tm_isdst=-1)

 ❤  datetime.date.fromtimestamp() 把一个时间戳转为datetime日期类型

import datetime
import time

d = datetime.date.fromtimestamp(0)
print(d)
# 1970-01-01
d = time.time()
d1 = datetime.date.fromtimestamp(d)
print(d1)
# 2023-02-23

❤  时间运算(datetime.timedelta)

# 时间运算
import datetime

d = datetime.datetime.now()
print(d)
# 2023-02-23 13:59:53.519736

d1 = datetime.datetime(2017, 10, 1, 12, 53, 11, 821218)
print(d1)
# 2017-10-01 12:53:11.821218

d2 = datetime.datetime.now() + datetime.timedelta(4)  # 当前时间 +4天
print(d2)
# 2023-02-27 13:59:53.520734

d3 = datetime.datetime(2018, 3, 12, 14, 52, 35, 276589)
print(d3)
# 2018-03-12 14:52:35.276589

d4 = datetime.datetime.now() + datetime.timedelta(hours=4)  # 当前时间+4小时
print(d4)
# 2023-02-23 17:59:53.520734

❤  时间替换

# 时间替换
import datetime
d = datetime.datetime.now()
print(d)
# 2023-02-23 14:01:21.191902
d1 = d.replace(year=2999,month=11,day=30)
print(d1)
# 2999-11-30 14:01:21.191902
d2 = datetime.date(2999, 11, 30)
print(d2)
# 2999-11-30

❤  date类

date类表示一个日期。日期由年、月、日组成(地球人都知道~~)。date类的构造函数如下:

date.min: 返回 date(MINYEAR, 1, 1).
date.max: 返回 date(MAXYEAR, 12, 31).
date.year: 返回 年, MINYEAR和MAXYEAR之间
date.month: 返回 月, 1到12月之间
date.day: 返回 1到 n 之间.
  • year的范围是[MINYEAR, MAXYEAR],即[1, 9999];
  • month的范围是[1, 12]。(月份是从1开始的,不是从0开始的_);
  • day的最大值根据给定的year, month参数来决定。例如闰年2月份有29天;
  • date类定义了一些常用的类方法与类属性,方便操作:
  • date.max、date.min:date对象所能表示的最大、最小日期;
  • date.resolution:date对象表示日期的最小单位。这里是天。
  • date.today():返回一个表示当前本地日期的date对象;
  • date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象;

补充:

date.replace(year, month, day):返回一个相同值的data对象, 除了这些参数给关键字指定新的值.
date.timetuple(): 返回一个time.struct_time对象.
date.toordinal(): 返回一个Gregoian Calendar对象.
date.weekday(): 返回day of the week. 星期一为0,星期日为6.
date.isoweekday(): 返回day of the week. 星期一为1,星期日为7.
date.isocalendar(): 返回一个三元组, (ISO year, ISO week number, ISO weekday).
date.isoformat(): 返回 一个'YYYY-MM-DD'的字符串格式.
date.ctime(): 返回一个字符串日期, d.ctime() 等同于 time.ctime(time.mktime(d.timetuple())).
date.strftime(format): 返回一个字符串日期, 格式自定义.

 

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

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

相关文章

阿里云ECS TOP性能提升超20%!KeenTune助力倚天+Alinux3达成开机即用的全栈性能调优 | 龙蜥技术

文/KeenTune SIG01阿里云 ECS 上售卖页新增“应用加速”功能2023年1月12日 阿里云 ECS 的售卖页有了一些新的变化,在用户选择倚天 Alinux3 新建实例时,多了一个新的选项“应用加速”。这个功能是 阿里云 ECS 基于 KeenTune 提供典型云场景的开机即用的全…

翻转链表k个元素——递归

题目描述25. K 个一组翻转链表难度困难1920收藏分享切换为英文接收动态反馈给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那…

【Python入门第十六天】Python If ... Else

Python 条件和 If 语句 Python 支持来自数学的常用逻辑条件&#xff1a; 等于&#xff1a;a b不等于&#xff1a;a ! b小于&#xff1a;a < b小于等于&#xff1a;a < b大于&#xff1a;a > b大于等于&#xff1a;a > b 这些条件能够以多种方式使用&#xff0c…

再析jvm

前言 希望自己每一次学习都有不同的理解 文章目录前言1. jvm的组成取消永久代使用元空间原因2. 运行时数据区3. 堆栈区别队列和栈&#xff0c;队列先进先出&#xff0c;栈先进后出从栈顶弹出4. GC、内存溢出、垃圾回收4.1 如何确定引用是否会被回收4.1.1 Java中的引用类型4.1.…

OpenStack手动分布式部署Glance【Queens版】

目录 Glance简介 1、登录数据库配置&#xff08;在controller执行&#xff09; 1.1登录数据库 1.2数据库里创建glance 1.3授权对glance数据库的正确访问 1.4退出数据库 1.5创建glance用户密码为000000 1.6增加admin角色 1.7创建glance服务 1.8创建镜像服务API端点 2、安装gla…

LeetCodeHOT100热题02

写在前面 主要是题目太多&#xff0c;所以和前面的分开来记录。有很多思路的图都来源于力扣的题解&#xff0c;如侵权会及时删除。不过代码都是个人实现的&#xff0c;所以有一些值得记录的理解。之前的算法系列参看&#xff1a; 剑指offer算法题01剑指offer算法题02 七、动…

SQL零基础入门学习(八)

SQL零基础入门学习&#xff08;七&#xff09; SQL 连接(JOIN) SQL join 用于把来自两个或多个表的行结合起来。 下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。 SQL JOIN SQL JOIN 子句用于把来自两个或多个表的行结合起来&#xff0c;基…

TensorBoard自定义修改单条及多条曲线颜色

在深度学习可视化训练过程中&#xff0c;曲线颜色是随机的&#xff0c;想要将好看的曲线颜色图放到论文中&#xff0c;就得自定义曲线颜色&#xff0c;具体方法见下文。 目录一、下载svg文件二、修改svg文件三、修改后曲线颜色对比四、总结一、下载svg文件 在TensorBoard界面中…

webman 连接 oracle

composer require topthink/think-oraclev2.1 配置文件 thinkorm.php return [ default > oracle, connections > [ oracle > [ // 数据库类型 type > oracle, // 服务器地址 hostname > 192…

多语言解决方案

文章目录背景整体方案多语言管理端客户端流水线其他背景 多语言是一个比较麻烦的事情&#xff0c;特别是当 App 比较大的时候&#xff0c;还会涉及到多个部门的开发以及翻译人员&#xff0c;这中间可能会存在比较大的沟通成本&#xff0c;而且还可能会阻塞开发的进度。以下是我…

【JavaEE初阶】第二节.多线程( 进阶篇 ) 锁的优化、JUC的常用类、线程安全的集合类

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、synchronized的优化操作 1.1 锁膨胀/锁升级 1.2 锁消除 1.3 锁粗化二、JUC 2.1 Callable接口 2.2 ReentrantLock类&…

Python获取中国大学MOOC某课程评论及其参与人数

文章目录前言一、需求二、分析三、运行结果前言 本系列文章来源于真实的需求本系列文章你来提我来做本系列文章仅供学习参考 一、需求 1、课程参加人数 2、课程学员名称及其评论 二、分析 首先查看网页源代码是否有需要的数据 课程参加人数 课程学员名称及其评论 F12 打开浏…

Linux中断处理

目录 一、什么是中断 二、中断处理原理 三、中断接口 3.1 中断申请 3.2 中断释放 3.3 中断处理函数原型 四、按键驱动 一、什么是中断 一种硬件上的通知机制&#xff0c;用来通知CPU发生了某种需要立即处理的事件 分为&#xff1a; 1. 内部中断 CPU执行程序的过程中&am…

力扣sql简单篇练习(二十)

力扣sql简单篇练习(二十) 1 广告效果 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 SELECT ad_id,IFNULL(ROUND(sum(IF(actionClicked,action,0))/sum(IF(actionIgnored,0,1))*100,2),0.00) ctr FROM Ads GROUP BY ad_id ORDER BY ctr desc,ad_id …

消息队列MQ介绍

消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列&#xff0c;应用程序可独立地执行--它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。 消息中间件概述 消息队列技术是…

Wi-Fi 7技术揭秘

引言 2022年4月7日&#xff0c;紫光股份旗下新华三集团全球首发企业级智原生Wi-Fi 7 AP新品 WA7638和WA7338。仅在同年的6月15日&#xff0c;在东京举行的第29届日本网络通信展览会&#xff08;Interop Tokyo 2022&#xff0c;简称Interop展&#xff09;中&#xff0c;WA7638就…

Java - 数据结构,栈

一、栈 1.1、什么是栈 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压…

关于《How to Learn to Code Get a Developer Job in 2023》的经验学习

1. Who is This Book For ? for Anyone who is considering a career in software development. 2. Can Anyone Learn to Code? Any sufficiently motivated person can learn to code. 3.Executive Summary Learning to code is hard.Getting a job as a software devel…

01-基于SOA架构someip 开发-Linux开发环境搭建

前言&#xff1a;SOME/IP 是一个汽车的中间件解决方案&#xff0c;可用于控制消息。从一开始&#xff0c;它的设计就是为了完美地适应不同尺寸和不同操作系统的设备。这包括小型设备&#xff0c;如相机、AUTOSAR设备&#xff0c;以及头部单元或远程信息处理设备。同时还确保了S…

华为OD机试题,用 Java 解【VLAN 资源池】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…