Python学习之——时间和日期

Python学习之——时间模块

  • 参考
  • time 模块
    • 常见接口
  • datetime 模块
    • 常见接口
  • calendar 模块
    • 常见接口
  • 示例

参考

Python datetime模块详解、示例
搞定Python时区的N种姿势
calendar – 日历相关

time 模块

在Python中,通常有这几种方式来表示时间:
1)时间戳
2)格式化的时间字符串
3)元组(struct_time)共九个元素。

UTC(Coordinated Universal Time,世界协调时):即格林威治天文时间,世界标准时间,在中国为UTC+8。
DST(Daylight Saving Time:即夏令时。
时间戳(timestamp):时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。
元组(struct_time):struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。
下面列出这种方式元组中的几个元素:

索引(Index)属性(Attribute)值(Values)
0tm_year(年)比如2011
1tm_mon(月)1 - 12
2tm_mday(日)1 - 31
3tm_hour(时)0 - 23
4tm_min(分)0 - 59
5tm_sec(秒)0 - 61
6tm_wday(weekday)0 - 6(0表示周日)
7tm_yday(一年中的第几天)1 - 366
8tm_isdst(是否是夏令时)默认为-1

常见接口

import time# 返回当前UTC时间的时间戳(从1970年1月1日00:00:00开始按秒计算的偏移量)
time.time()# 和localtime()类似,gmtime()是将一个时间戳转换为UTC-0时区的struct_time。
time.gmtime([secs])# 将一个时间戳转换为当前本地时区的struct_time。secs参数未提供,返回当前本地时区的当前时间struct_time
time.localtime([secs])# localtime()的反函数,将一个struct_time转化为时间戳。
# 参数是 struct_time 或者完整的9元组 ,注意参数是当前本地时区的struct_time,而不是UTC-0时区
time.mktime(t)# 把一个表示时间的struct_time或者完整的9元组转化为格式化的时间字符串。
# 如果t未指定,将传入time.localtime()
time.strftime(format[, t])# strftime()的逆操作, 把一个格式化时间字符串转化为struct_time
time.strptime(string[, format])# 把一个表示时间的struct_time或者完整的9元组表示为:'Sat Dec  9 23:16:45 2023'。这种形式
# 如果没有参数,将会将time.localtime()作为参数传入
time.asctime([t])# 把一个时间戳转化为time.asctime()的形式。
# 如果参数未给或者为None的时候,将会默认time.time()为参数
time.ctime([secs])# 线程推迟指定的时间运行,单位为秒。
time.sleep(secs)# 在UNIX系统上,clock()返回的是秒表示的时间戳
# 在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间。
time.clock()

示例

import time
print(f'time.time():{time.time()}')
print(f'time.gmtime():{time.gmtime()}')
print(f'time.localtime():{time.localtime()}')
print(f'time.strftime("%Y/%m/%d/ %H:%M:%S", time.localtime()):{time.strftime("%Y/%m/%d/ %H:%M:%S", time.localtime())}')
print(f'time.asctime:{time.asctime()}')# 结果
time.time():1702135670.389908
time.gmtime():time.struct_time(tm_year=2023, tm_mon=12, tm_mday=9, tm_hour=15, tm_min=27, tm_sec=50, tm_wday=5, tm_yday=343, tm_isdst=0)
time.localtime():time.struct_time(tm_year=2023, tm_mon=12, tm_mday=9, tm_hour=23, tm_min=27, tm_sec=50, tm_wday=5, tm_yday=343, tm_isdst=0)
time.strftime("%Y/%m/%d/ %H:%M:%S", time.localtime()):2023/12/09/ 23:27:50
time.asctime:Sat Dec  9 23:27:50 2023

datetime 模块

python datetime time 时间模块
搞定Python时区的N种姿势

datetime模块中包含如下类:

类名功能说明
date日期对象,常用的属性有year, month, day
time时间对象
datetime日期时间对象,常用的属性有hour, minute, second, microsecond
datetime_CAPI日期时间对象C语言接口
timedelta时间间隔,即两个时间点之间的长度
tzinfo时区信息对象

datetime模块中包含的常量

datetime.MAXYEAR	# 返回能表示的最大年份9999
datetime.MINYEAR    # 返回能表示的最小年份1

常见接口

from datetime import datetime, timedelta, tzinfo# 获取当前utc-0时区的时间
datetime.utcnow()
# 由时间戳返回本地时间datetime
datetime.fromtimestamp
# 由时间戳返回utc时间datetime
datetime.utcfromtimestamp

calendar 模块

calendar – 日历相关
Python-标准库calendar的使用
提供日历功能

常见接口

import calendarif __name__ == "__main__":cc = calendar.Calendar(0)one_weekday = []for index, dt in enumerate(cc.itermonthdates(2023, 12)):if index != 0 and index % 7 == 0:print(''.join(one_weekday))one_weekday.clear()one_weekday.append(f'{dt} ')# 结果
2023-11-27 2023-11-28 2023-11-29 2023-11-30 2023-12-01 2023-12-02 2023-12-03
2023-12-04 2023-12-05 2023-12-06 2023-12-07 2023-12-08 2023-12-09 2023-12-10
2023-12-11 2023-12-12 2023-12-13 2023-12-14 2023-12-15 2023-12-16 2023-12-17
2023-12-18 2023-12-19 2023-12-20 2023-12-21 2023-12-22 2023-12-23 2023-12-24

示例

一些常见的时间转换函数封装

# -*- coding: utf-8 -*-
import time
from datetime import datetime, timezone, timedeltaTIME_FORMAT_STR = "%Y/%m/%d/ %H:%M:%S"
DAY_SECOND = 86400
HOUR_SECOND = 3600
MINUTE_SECOND = 60def datetime_to_str(datetime_obj: datetime, format_str=TIME_FORMAT_STR) -> str:return datetime_obj.strftime(format_str)def str_to_datetime(time_str: str, format_str=TIME_FORMAT_STR) -> datetime:return datetime.strptime(time_str, format_str)def datetime_to_timestamp(datetime_obj: datetime) -> float:return time.mktime(datetime_obj.timetuple())def timestamp_to_str(timestamp: float, format_str=TIME_FORMAT_STR) -> str:return time.strftime(format_str, time.localtime(timestamp))def str_to_timestamp(time_str: str, format_str=TIME_FORMAT_STR) -> float:"""time.gmtime([secs]): 将一个时间戳转换为UTC-0时区的struct_time。time.localtime([secs]): 将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准time.mktime: localtime()的反函数,将一个struct_time转化为时间戳,注意参数是使用本地时区的_TimeTuple | struct_time,而不是UTC-0时区"""datetime_obj: datetime = str_to_datetime(time_str, format_str)return time.mktime(datetime_obj.timetuple())def get_local_date_str(timestamp: float) -> str:"""将一个时间戳转换为当前本地时区的日期字符串"""# 将一个时间戳转换为当前时区的struct_timetime_struct: time.struct_time = time.localtime(int(timestamp))ret: str = time.strftime(TIME_FORMAT_STR, time_struct)return retdef get_local_date_str_custom1(timestamp: float, HMS_FMT="%H:%M:%S") -> str:time_struct: time.struct_time = time.localtime(int(timestamp))input_day = int(timestamp) / DAY_SECONDcur_day = int(time.time()) / DAY_SECONDif input_day == cur_day:return time.strftime(HMS_FMT, time_struct)else:return time.strftime(TIME_FORMAT_STR, time_struct)def get_now_time_str(is_local: bool = True, timezone_num: int = 0) -> str:if is_local:# 当前本地时区datetime_obj: datetime = datetime.now()else:# utc-0 时区# utc_0_datetime: datetime = datetime.utcnow()# timezone_num=0: utc-0 时区; timezone_num=2: utc-2 时区datetime_obj: datetime = datetime.now(timezone(timedelta(hours=timezone_num)))return datetime_to_str(datetime_obj)def timestamp_to_utc_str(timestamp: float, format_str=TIME_FORMAT_STR) -> str:"""时间戳转utc-0时区的时间"""datetime_obj: datetime = datetime.utcfromtimestamp(timestamp)return datetime_obj.strftime(format_str)def timestamp_to_local_str(timestamp: float, format_str=TIME_FORMAT_STR) -> str:"""时间戳转当前本地时区的时间"""datetime_obj: datetime = datetime.fromtimestamp(timestamp)return datetime_obj.strftime(format_str)def get_local_offst() -> timedelta:"""获取当前时区相对UTC-0的偏移"""timestamp: float = time.time()local_datetime_obj: datetime = datetime.fromtimestamp(timestamp)utc0_datetime_obj: datetime = datetime.utcfromtimestamp(timestamp)offset: timedelta = local_datetime_obj - utc0_datetime_objreturn offsetdef seconds_to_left_str(input_seconds: float) -> str:"""秒数seconds转剩余倒计时:XX时XX分XX秒https://www.runoob.com/python/att-string-format.html"""hours = 0minutes = 0seconds = 0input_seconds = int(input_seconds)if input_seconds >= 0:hours = int(input_seconds / HOUR_SECOND)minutes = int(input_seconds % HOUR_SECOND / MINUTE_SECOND)seconds = int(input_seconds % MINUTE_SECOND)# 例如:(100, 1, 10) ==> 100时01分10秒; (0, 0, 0) ==> 0时00分00秒return "{:0>d}时{:0>2d}分{:0>2d}秒".format(hours, minutes, seconds)if __name__ == "__main__":print(f'utc-0 time_str: {timestamp_to_utc_str(time.time())}')print(f'utc-local time_str: {timestamp_to_local_str(time.time())}')print(f'utc-0 time_str: {get_now_time_str(False, 0)}')print(f'utc-local time_str: {get_now_time_str()}')print(f'utc-local time_str:{get_local_date_str(time.time())}')print(f'utc-local offset:{get_local_offst()}')input_seconds = 6000print(f'{input_seconds} seconds==>{seconds_to_left_str(input_seconds)}')

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

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

相关文章

浮点数在计算机中如何存储

举例: 结果: 文字描述: 先将浮点数转化为二进制的表示形式, 接着将其二进制的形式按照科学计数法来表示, 符号位的确定:正数0, 负数1 指数的确定:将其二进制表示成为科学计数法…

Fall in love with English

Fall in love with English 爱上英语 Hiding behind the loose dusty curtain, a teenager packed up his overcoat into the suitcase. 躲藏在布满尘土的松软的窗帘后边,一个年轻人打包他的外套到行李箱中。 He planned to leave home at dusk though there was th…

超完整的mysql安装配置方法(包含idea和navicat连接mysql,并实现建表)

mysql安装配置方法 1、下载mysql2、解压到指定的安装目录3、配置初始化文件my.ini4、配置用户变量和系统变量5、初始化mysql6、安装mysql服务并启动修改密码7、使用idea连接mysql8、使用Navicat可视化工具连接mysql,并实现新建数据库,新建表 1、下载mysq…

计算机考研408-计算机网络、操作系统整书知识点脑图

计算机网络、操作系统整书知识点脑图 今天突然想起来考研期间为了方便记忆,费了很大力气整理了计算机网络、操作系统两本书知识点的脑图,想着放着也没啥用,分享出来给大家看看 但是思维导图格式的东西好像没法直接发成文章,上传…

【NodeJs】UniSMS 实现短信验证码

承接上文 ,上次用的是 短信宝平台 认证已经通过 后续又新增要求 平台相当麻烦! 短信宝实现短信发送要求: 1.平台绑定手机号 必须和 营业执照法人一致 2.平台个人实名认证 必须和 营业执照法人一致 3.平台需要上传营业执照 4.平台需要上…

拒接服务攻击(DOS)的初步介绍

文章目录 什么是拒绝服务攻击拒绝服务攻击的过程拒绝服务攻击的类型常见的拒绝服务攻击如何防范拒绝服务攻击分布式拒绝服务攻击(DDoS) 什么是拒绝服务攻击 拒绝服务攻击是一种网络攻击方式,攻击者通过向目标计算机系统或网络发送大量的请求…

免费分享一套Springboot+Vue前后端分离的在线商城系统,挺实用的

大家好,我是java1234_小锋老师,看到一个不错的SpringbootVue前后端分离的在线商城系统,分享下哈。 项目视频演示 【免费】SpringbootVue在线商城系统 毕业设计 Java毕业设计_哔哩哔哩_bilibili【免费】springbootvue在线商城系统 毕业设计 …

97基于matlab的改进的带记忆的模拟退火算法求解TSP问题

基于matlab的改进的带记忆的模拟退火算法求解TSP问题,采用多普勒型降温曲线描述迭代过程,在传统算法的基础上增加记忆功能,可测试中国31/64/144以及att48城市的数据,也可自行输入数据进行测试,测试结果基本达到当前最优…

Swagger2的使用

手写Api文档的几个痛点: 文档需要更新的时候,需要再次发送一份给前端,也就是文档更新交流不及时。 接口返回结果不明确 不能直接在线测试接口,通常需要使用工具,比如postman 接口文档太多,不好管理 Sw…

gin投票项目4

对应视频v2版本 gin项目投票系统4 1.增加一个注册账号的功能 增加接口 参数校验:(需求) 确认密码需要一致,不为空用户名必须唯一, 不为空用户名大于8小于16位密码大于8小于16位,并且不能为纯数字 正则表达式 必须知道这东西…

我对迁移学习的一点理解(系列2)

文章目录 我对迁移学习的一点理解 我对迁移学习的一点理解 源域和目标域是相对的概念,指的是在迁移学习任务中涉及到的两个不同的数据集或领域。 源域(Source Domain)通常指的是已经进行过训练和学习的数据集,它被用来提取特征、…

Nginx缓存及HTTPS配置小记

缓存基础 缓存分类 某些场景下,Nginx需要通过worker到上有服务中获取数据并将结果响应给客户端,在高并发场景下,我们完全可以将这些数据视为热点数据,并将其缓存到Nginx服务上。 客户端缓存:将缓存数据放到客户端。 …

yolov8与yolov5网络对比

回顾一下YOLOv5,不然没机会了 这里粗略回顾一下,这里直接提供YOLOv5的整理的结构图吧: Backbone:CSPDarkNet结构,主要结构思想的体现在C3模块,这里也是梯度分流的主要思想所在的地方;PAN-FPN&…

OFDM模糊函数仿真

文章目录 前言一、OFDM 信号及模糊函数1、OFDM 信号表达式2、模糊函数表达式 二、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、OFDM 模糊函数②、OFDM 距离模糊函数③、OFDM 速度模糊函数 前言 本文进行 OFDM 的仿真,首先看一下 OFDM 的模糊函数仿真效果&#xf…

【vim】常用操作

用的时候看看,记太多也没用,下面都是最常用的,更多去查文档vim指令集。 以下均为正常模式下面操作,正在编辑的,先etc一下. 1/拷贝当前行 yy,5yy为拷贝包含当前行往下五行 2/p将拷贝的东西粘贴到当前行下…

Nmap脚本的应用场景

网络安全检测和漏洞扫描 Nmap脚本是一种强大的工具,可以用于网络安全检测和漏洞扫描。在渗透测试工程师的角度下,本文将详细阐述Nmap脚本的应用场景,以及如何使用Nmap脚本进行网络安全检测和漏洞扫描。 一、Nmap脚本的应用场景 Nmap脚本在渗…

Java、JDK、JRE、JVM

Java、JDK、JRE、JVM 一、 Java 广义上看,Kotlin、JRuby等运行于Java虚拟机上的编程语言以及相关的程序都属于Java体系的一员。从传统意义上看,Java社区规定的Java技术体系包括以下几个部分: Java程序设计语言各种硬件平台上的Java虚拟机实…

vue的知识点

Vue.js是一个渐进式JavaScript框架,用于简化Web应用程序开发和管理。下面是Vue.js的一些核心知识点: 1. 数据绑定:Vue.js通过指令和模板语法实现了双向数据绑定,可以实时更新视图和模型之间的数据。 2. 组件化开发:V…

【力扣】移除链表元素203

目录 1.前言2. 题目描述3. 题目分析3.1 不带哨兵位3.2 带哨兵位 4. 附代码4.1 不带哨兵位4.2 带哨兵位 1.前言 这里开始介绍从网上一些刷题网站上的题目,在这里做一些分享,和学习记录。 先来介绍一些力扣的OJ题目。 这里的OJ就是我们不需要写主函数&…

数据表记录的操作

一、数据添加 1、打开SSMS,附加数据库(数据库文件在自己的文件夹下面),并进行下面的设置: (1)设置“部门信息”表中的“编号”为主键(SSMS) 首先建立好所需的数据库库…