Python 常用模块time和datetime

news2024/11/14 2:37:08

【一】python中表示时间的三种方式

import time

# 时间戳
res = time.time()
print(res, type(res))
# 1703055531.8492236 <class 'float'>

# 格式化的时间字符串
res = time.strftime('%Y-%m-%d %X')
print(res, type(res))
# 2023-12-20 14:58:51 <class 'str'>

# 结构化的时间的时间(时间元组)
res = time.struct_time('%Y-%m-%d %X')
print(res, type(res))
# time.struct_time(tm_year='%', tm_mon='Y', tm_mday='-', tm_hour='%', tm_min='m', tm_sec='-', tm_wday='%', tm_yday='d', tm_isdst=' ') <class 'time.struct_time'>

【二】time

(1)时间戳(计算机能够识别的时间)
  • Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
  • 时间戳在线转换网址:时间戳(Unix timestamp)转换工具
import time

# 生成时间戳
res = time.time()
print(res, type(res))
# 1703055531.8492236 <class 'float'># 生成时间戳

# 时间戳转换为时间元组(UTC时间)英国伦敦当地时间
res = time.gmtime(time.time())
print(res, type(res))
# time.struct_time(tm_year=2023, tm_mon=12, tm_mday=20, tm_hour=7, tm_min=19, tm_sec=21, tm_wday=2, tm_yday=354, tm_isdst=0) <class 'time.struct_time'>

# 时间戳转换为时间元组(北京时间)UTC时间 + 8小时 = 北京时间
res = time.localtime(time.time())
print(res, type(res))
# time.struct_time(tm_year=2023, tm_mon=12, tm_mday=20, tm_hour=15, tm_min=21, tm_sec=4, tm_wday=2, tm_yday=354, tm_isdst=0) <class 'time.struct_time'>
(2)格式化的时间字符串(人能够看懂的时间)
import time
# 输出 年-月-日
res = time.strftime("%Y-%m-%d")
print(res, type(res))
# 输出 日/月/年 时:分:秒
res = time.strftime("%x %X")
print(res, type(res))
# 2023-12-20 <class 'str'>
# 12/20/23 15:23:53 <class 'str'>
  • 时间日期格式化符号
符号含义
%y两位数 年份
%Y四位数 年份
%m两位数 月份
%d两位数 日期
%H24小时制 小时
%l12小时制 小时
%M分钟
%S
%a缩写英语 星期
%A全拼英语 星期
%b缩写英语 月份
%B全拼英语 月份
%cWed Dec 20 15:34:36 2023
%j年内第几天
%pPM/AM
%U星期天开始 年内第几个周
%w星期天开始 月内第几个周
%W星期一开始 年内第几个周
%x12/20/23 月/日/年
%X15:40:22 时:分:秒
%Z中国标准时间 当前时区的名称
(3)时间元组(结构化时间)(用来操作的时间)
import time
# 获得当体时间 时间元组
res = time.localtime()
print(res, type(res))
# 通过“.”取值, 输出时间
print(res.tm_min, type(res.tm_min))
# 通过索引取值,输出第一个元素
print(res[0], type(res[0]))

# time.struct_time(tm_year=2023, tm_mon=12, tm_mday=20, tm_hour=15, tm_min=53, tm_sec=7, tm_wday=2, tm_yday=354, tm_isdst=0) <class 'time.struct_time'>
# 53 <class 'int'>
# 2023 <class 'int'>
  • 时间元组参数
索引(Index)属性(Attribute)值(Values)
0tm_year(年)2023
1tm_mon(月)1 - 12
2tm_mday(日)1 - 31
3tm_hour(时)0 - 23
4tm_min(分)0 - 59
5tm_sec(秒)0 - 60
6tm_wday(weekday)0 - 6(0表示周一)
7tm_yday(一年中的第几天)1 - 366
8tm_isdst(是否是夏令时)默认为0
(4)三种时间之间的转换方式

请添加图片描述

  • 时间元组和格式化时间字符串
import time

# 格式化的时间字符串  --》  时间元组
res_tuple = time.strptime("2023-12-30","%Y-%m-%d")
print(res_tuple, type(res_tuple))
# time.struct_time(tm_year=2023, tm_mon=12, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=364, tm_isdst=-1) <class 'time.struct_time'>

# 时间元组  --》  格式化的时间字符串
res = time.strftime("%Y-%m%d", res_tuple)
print(res, type(res))
# 2023-1230 <class 'str'>
res = time.asctime(res_tuple)
print(res, type(res))
# %a %b %d %H:%M:%S %Y
# Sat Dec 30 00:00:00 2023 <class 'str'>
  • 时间元组和时间戳
import time

# 时间戳  --》  时间元组
res = time.gmtime(time.time())
print(res, type(res))
res = time.localtime(time.time())
print(res, type(res))
# time.struct_time(tm_year=2023, tm_mon=12, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=364, tm_isdst=-1) <class 'time.struct_time'>

# 时间元组  --》  时间戳
res = time.mktime(res)
print(res, type(res))
# 1703031337.0 <class 'float'>

  • 时间戳和格式化时间字符串
import time

res = time.ctime(time.time())
print(res, type(res))
#  %a  %b %d %H:%M:%S  %Y
# Wed Dec 20 16:27:11 2023 <class 'str'>

【三】datetime

【1】自定义日期并格式化

import datetime

res = datetime.date(2012,12,21)
print(res, type(res))
# 2012-12-21 <class 'datetime.date'>

【2】获取本地时间

(1)年月日
import datetime

res = datetime.date.today()
print(res, type(res))
# 23-12-20 <class 'datetime.date'>
# 获取年份
print(res.year, type(res.year))
# 2023 <class 'int'>
# 获取星期 0表示周一
print(res.weekday(), type(res.weekday()))
# 2 <class 'int'>
# 获取星期 1表示周一
print(res.isoweekday(), type(res.isoweekday()))
# 3 <class 'int'>
(2)年月日时分秒
  • datetime.datetime.today() 不支持传递时区参数
  • datetime.datetime.now() 支持传递时区参数
    • datetime.datetime.now(datetime.timezone.utc) 北京时间
  • datetime.datetime.utcnow() 北京时间
import datetime

res = datetime.datetime.today()
print(res, type(res))
# 2023-12-20 16:36:38.448843 <class 'datetime.datetime'>
# 获取年份
print(res.year, type(res.year))
# 2023 <class 'int'>
# 获取星期 0表示周一
print(res.weekday(), type(res.weekday()))
# 2 <class 'int'>
# 获取星期 1表示周一
print(res.isoweekday(), type(res.isoweekday()))
# 3 <class 'int'>

【3】时间差

(1)生成时间差
import datetime
# 生成指定时间戳 两周多两天
day_delta = datetime.timedelta(weeks=2, days=2)
print(day_delta, type(day_delta))
# 16 days, 0:00:00 <class 'datetime.timedelta'>
(2)推迟时间
import datetime

day_delta = datetime.timedelta(weeks=2, days=2)

today = datetime.datetime.today()
print(f"今天日期:{today}")
print(f"16天后的日期:{today + day_delta}")
print(f"16天前的日期:{today - day_delta}")
# 今天日期:2023-12-20 16:56:58.884164
# 16天后的日期:2024-01-05 16:56:58.884164
# 16天前的日期:2023-12-04 16:56:58.884164
(3)时间差对象和时间日期对象的关系
  • 时间差对象 = 时间日期对象 - 时间日期对象
  • 时间日期对象 = 时间日期对象 ± 时间差对象
import datetime

day_delta = datetime.timedelta(days=1)
day_today = datetime.datetime.today()
day_last = day_today - day_delta

# 新的时间日期对象
print(day_last, type(day_last))
day_future = day_today + day_delta
print(day_future, type(day_future))
# 2023-12-19 17:10:46.187963 <class 'datetime.datetime'>
# 2023-12-21 17:10:46.187963 <class 'datetime.datetime'>

# 时间差对象
day_delta_new = day_future - day_last
print(day_delta_new, type(day_delta_new))
# 2 days, 0:00:00 <class 'datetime.timedelta'>
(4)应用
  • 计算距离今天还有几天过生日
import datetime


def cal_birthday(month=1, day=1):
    # 获取当天时间信息
    today_info = datetime.datetime.today()
    # 假设今年还没过生日
    future_birthday = datetime.datetime(today_info.year, month, day)
    # 计算还有几天
    day_delta = future_birthday - today_info
    # 如果天数小于0,那么今年已经过过了,计算距离明年的生日还有多久
    if day_delta.days < 0:
        future_birthday = datetime.datetime(today_info.year + 1, month, day)
        day_delta = future_birthday - today_info
    return day_delta


res = cal_birthday(11, 21)
print(f"还有{res.days}{round(res.seconds / 3600)}小时,你就过生日了")

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

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

相关文章

《数据结构、算法与应用C++语言描述》- 最小赢者树模板的C++实现

赢者树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_30winnerTree 比赛规则 假定有 n 个选手参加一次网球比赛。比赛规则是“突然死亡法”(sudden-death mode)&#xff1a;一名选手只要输掉一场球&#xff0c;就被淘汰。一对一对…

openstack-neutron服务安装

文章目录 网络服务概述概念主机网络 安装并配置控制节点先决条件完成下面的步骤以创建数据库&#xff1a;用数据库连接客户端以 root 用户连接到数据库服务器&#xff1a;创建 neutron 数据库:对neutron 数据库授予合适的访问权限&#xff0c;使用合适的密码替换NEUTRON_DBPASS…

Tomcat为什么要重写类加载器?

文章目录 一、双亲委派机制二、分析1、Tomcat需要隔离性2、Tomcat需要热替换3、打破双亲委派机制 三、Tomcat类加载器1、拓展类加载器2、工作原理 四、总结 一、双亲委派机制 首先了解下双亲委派机制&#xff0c;大致过程如下&#xff1a; 简单来说&#xff0c;就是加载class…

FIO测试参数与linux内核IO栈的关联分析-part2

二、FIO工具简介 我们在linux环境中&#xff0c;有一个常见测试SSD性能的工具叫做FIO。FIO (Flexible I/O Tester) 是一个强大的开源I/O基准测试工具&#xff0c;主要用于测试存储设备的性能&#xff0c;包括硬盘、固态硬盘 (SSD)、网络存储系统&#xff08;如NAS和SAN&#x…

VueCron使用方法

1&#xff09;什么是vueCron Vue Cron 是基于 Vue.js 的定时任务管理组件&#xff0c;它提供了一种简单易用的方式来设定和管理定时任务。Vue Cron 提供了一个类似于 Linux crontab 的界面&#xff0c;用户可以通过它来创建、编辑和删除定时任务。 2&#xff09;安装依赖及应…

urllib2 HTTP头部注入

文章目录 注入原理例题 [SWPU 2016]web7 注入原理 参考文章 应用场景是具有SSRF漏洞&#xff0c;结合CRLF注入 我们以redis数据库为例&#xff0c;当存在SSRF时我们伪造以下请求 http://127.0.0.1%0d%0aCONFIG%20SET%20dir%20%2ftmp%0d%0aCONFIG%20SET%20dbfilename%20evil%…

数字基础制度:构建数字经济的制度保障

数字经济已经成为全球经济的主要驱动力,它的快速发展不仅改变了我们的生活方式,也对社会和经济产生了深远的影响。在这个数字时代,数字基础制度的建设至关重要,它是一系列与数字经济相关的基本规则、政策和法律框架,是构建数字经济的制度保障,为数字经济的健康、可持续发…

程序员的20大Git面试问题及答案

文章目录 1.什么是Git&#xff1f;2.Git 工作流程3.在 Git 中提交的命令是什么&#xff1f;4.什么是 Git 中的“裸存储库”&#xff1f;5.Git 是用什么语言编写的&#xff1f;6.在Git中&#xff0c;你如何还原已经 push 并公开的提交&#xff1f;7.git pull 和 git fetch 有什么…

mysql:查看服务端为了处理连接而创建的线程数量

使用命令show global status like Threads_created;可以查看服务端为了处理连接而创建的线程数量。 例如&#xff1a;

【开源软件】最好的开源软件-2023-第三名 Docker

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

AOSP 源码编译android 12

目录 一、python安装 a. python2安装 b. python3安装 二、repo管理多个git a.第一步, 新建一个空白文件夹保存repo引导文件,并包含你的路径 b.下载启动器 c.将git-repo中的repo文件复制到 1 创建的.bin目录中 d.修改权限 e. 执行版本检查 三、初始化工程 a.执行创建文件…

数据结构学习 Leetcode300最长递增子序列

是我在学习动态规划时遇到的一道题。 题目&#xff1a; 一共有两种解法&#xff1a; 动态规划贪心 二分&#xff08;很难理解&#xff0c;我还没完全懂。。。&#xff09; 解法一&#xff1a;动态规划 思路&#xff1a; 状态&#xff1a;nums的前i个数的最长递增子序列。dp…

Python 正则表达式入门:轻松掌握字符串匹配的艺术

Python 正则表达式入门&#xff1a;轻松掌握字符串匹配的艺术 引言&#xff1a;什么是正则表达式&#xff1f;基础知识&#xff1a;正则表达式的语法和规则Python中的正则表达式&#xff1a;re模块的使用实战应用&#xff1a;常见的正则表达式案例最佳实践与常见错误结语&#…

uml用例图是什么?有哪些要素?

UML用例图是什么&#xff1f; UML用例图&#xff08;Unified Modeling Language Use Case Diagram&#xff09;是一种用于描述系统功能和用户之间交互的图形化建模工具。它是UML的一部分&#xff0c;主要用于识别和表示系统中的各个用例&#xff08;用户需求或功能点&#…

Axure中继器的使用实现表格的增删改查的自定义文件

目录 一.认识中继器 1.1.什么中继器 1.2. 中继器的组成 1.3.中继器的使用场景 二.中继器进行增删改查 三.十例表格增删改查 还有Axure这个东西许多东西需要我们去发现&#xff0c;我们需要去细心的研究&#xff0c;我们一起加油吧&#xff01;&#xff01;&#xff01;今…

Java如何开发PC客户端(Windows,Mac,Linux)

项目编译工具&#xff1a;Gradle开发工具&#xff1a; Idea开发语言&#xff1a; 建议java17以上ui组件&#xff1a;openjfx (org.openjfx.javafxplugin)打包工具: jpackage (org.beryx.jlink) 一、如何解决打包问题 java 14以后&#xff0c;有了jpackage工具&#xff0c;能够…

澳鹏干货解答!“关于机器学习的十大常见问题”

探索机器学习的常见问题&#xff0c;了解机器学习和人工智能的基本概念、原理、发展趋势、用途、方法和所需的数据要求从而发掘潜在的商机。 什么是机器学习&#xff1f; 机器学习即教授机器如何学习的过程&#xff0c;为机器提供指导&#xff0c;帮助它们自己开发逻辑&#…

108基于matlab的使用模拟退火 (SA) 求解并行机器调度的程序

基于matlab的使用模拟退火 &#xff08;SA&#xff09; 求解并行机器调度的程序&#xff0c;程序已调通&#xff0c;可直接运行。 108 matlab模拟退火 &#xff08;SA) (xiaohongshu.com)

Java实现限流算法

下面是一个使用Java实现的令牌桶算法的例子&#xff1a; import java.util.concurrent.atomic.AtomicLong;public class RateLimiter {private final long capacity; // 令牌桶容量private final long rate; // 令牌生成速率private AtomicLong tokens; // 当前令牌数量privat…

Python教程(16)——lambda函数介绍

目录 lambda函数介绍lambda函数语法lambda函数特性匿名性简洁性 在高阶函数中的应用 lambda函数介绍 我们平时经常可以在Python的代码中看到一种lambda开头的这种表达式&#xff0c;如果没有学过Python的相关知识&#xff0c;可能会一脸懵逼&#xff0c;不清楚到底这个关键字是…