热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python常用模块:date、datetime、calendar

一:时间元组时间元组将时间拆分成各个部



一:时间元组

时间元组将时间拆分成各个部分。
























































下标属性描述
0tm_year2008
1tm_mon1 到 12
2tm_mday1 到 31
3tm_hour0 到 23
4tm_min0 到 59
5tm_sec0 到 61 (60或61 是闰秒)
6tm_wday0到6 (0是周一)
7tm_yday一年中的第几天,1 到 366
8tm_isdst是否为夏令时,值有:1(夏令时)、0(不是夏令时)、-1(未知),默认 -1
二:常用方法

时间间隔是以秒为单位的浮点小数。每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。





























































函数描述示例
time.time()返回当前时间的时间戳(1970纪元后经过的浮点秒数)1575798460.997638
time.localtime(time.time())本地时间元组time.struct_time(tm_year=2019, tm_mon=12, tm_mday=8, tm_hour=17, tm_min=53, tm_sec=9, tm_wday=6, tm_yday=342, tm_isdst=0)
time.gmtime(time.time())接收时间戳(1970纪元后经过的浮点秒数)并返回格林威治天文时间下的时间元组t。注:t.tm_isdst始终为0time.struct_time(tm_year=2019, tm_mon=12, tm_mday=8, tm_hour=13, tm_min=5, tm_sec=19, tm_wday=6, tm_yday=342, tm_isdst=0)
time.asctime(time.localtime(time.time()))获取asc格式时间‘Sun Dec 8 17:55:22 2019’
time.ctime()等于time.asctime(time.localtime(time.time()))
time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())格式化日期2019-12-08 18:06:48
time.strptime(“2019-12-08 20:43:34”, “%Y-%m-%d %H:%M:%S”)将日期字符串转为时间元祖struct_timetime.struct_time(tm_year=2019, tm_mon=12, tm_mday=8, tm_hour=20, tm_min=43, tm_sec=34, tm_wday=6, tm_yday=342, tm_isdst=-1)
time.mktime(struct_time)将时间元祖转为时间戳1575809014.0
time.sleep(secs)让线程睡眠几秒
time.timezone是当地时区(未启动夏令时)距离格林威治的偏移秒数(>0,美洲;<=0大部分欧洲,亚洲,非洲)-28800
三:datetime:

datetime模块将时间日期细分了


  • date 日期(年月日)

  • time 时间(时分秒)

  • datetime(date + time)

  • timezone(时区)

  • timedelta(时间间隔)















































函数描述示例
datetime.datetime.now()当前时间datetime.datetime(2019, 12, 9, 11, 58, 3, 823844)
datetime.datetime.now().date()获取当前日期datetime.date(2019, 12, 9)
datetime.date.today() + datetime.timedelta(days=1)明天datetime.date(2019, 12, 10)
datetime.datetime.now() - datetime.timedelta(days=3)3天前datetime.datetime(2019, 12, 6, 12, 5, 9, 95893)
datetime.datetime.combine(datetime.date.today(), datetime.time.min)日期和时间组合(当天开始时间)datetime.datetime(2019, 12, 9, 0, 0)
datetime.datetime.combine(datetime.date.today(), datetime.time.max)日期和时间组合(当天结束时间)datetime.datetime(2019, 12, 9, 23, 59, 59, 999999)
(datetime.datetime(2019, 12, 9, 0, 0, 0) - datetime.datetime.now()).total_seconds()获取两个日期的差的秒数43854.034031

本周最后一天

datetime.date.today() + datetime.timedelta(6 - today.weekday())

本月最后一天

>>> import calendar
>>> today = datetime.date.today()
>>> _, last_day_num = calendar.monthrange(today.year, today.month)
>>> last_day = datetime.date(today.year, today.month, last_day_num)
>>> last_day
datetime.date(2015, 1, 31)

获取上个月的最后一天(可能跨年)

>>> import datetime
>>> today = datetime.date.today()
>>> first = datetime.date(day=1, mOnth=today.month, year=today.year)
>>> lastMOnth= first - datetime.timedelta(days=1)

Datetime / String / timestamp / time tuple 转换

Datetime / String / timestamp / time tuple
datetime -> string : strftime()
datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
string -> datetime: strptime()
datetime.datetime.strptime("2014-12-31 18:20:10", "%Y-%m-%d %H:%M:%S")
datetime -> timetuple: timetuple()
datetime.datetime.now().timetuple()
datetime -> date
datetime.datetime.now().date()
date -> datetime
today = datetime.date.today()
datetime.datetime.combine(today, datetime.time())
datetime.datetime.combine(today, datetime.time.min)
datetime -> timestamp
now = datetime.datetime.now()
timestamp = time.mktime(now.timetuple())
now.timestamp()
timestamp -> datetime
本地时间
datetime.datetime.fromtimestamp(1421077403.0)
UTC时间
datetime.utcfromtimestamp(t)
timestamp是一个浮点数,它没有时区的概念,而datetime是有时区的
某些编程语言(如Java和Javascript)的timestamp使用整数表示毫秒数,这种情况下只需要把timestamp除以1000就得到Python的浮点表示方法。
datetime可以通过timedelta加减法来加减操作
本地时间转换为UTC时间
本地时间是指系统设定时区的时间,例如北京时间是UTC+8:00时区的时间,而UTC时间指UTC+0:00时区的时间。
一个datetime类型有一个时区属性tzinfo,但是默认为None,所以无法区分这个datetime到底是哪个时区,除非强行给datetime设置一个时区:
>>> from datetime import datetime, timedelta, timezone
>>> tz_utc_8 = timezone(timedelta(hours=8)) # 创建时区UTC+8:00
>>> now = datetime.now()
>>> now
datetime.datetime(2015, 5, 18, 17, 2, 10, 871012)
>>> dt = now.replace(tzinfo=tz_utc_8) # 强制设置为UTC+8:00
>>> dt
datetime.datetime(2015, 5, 18, 17, 2, 10, 871012, tzinfo=datetime.timezone(datetime.timedelta(0, 28800)))
如果系统时区恰好是UTC+8:00,那么上述代码就是正确的,否则,不能强制设置为UTC+8:00时区。

常用时间处理方法

https://www.runoob.com/python/python-date-time.html

datetime.now()
datetime.fromtimestamp(int(enable_time) / 1000)
今天 today = datetime.date.today()
昨天 yesterday = today - datetime.timedelta(days=1)
上个月 last_mOnth= today.month - 1 if today.month - 1 else 12
当前时间戳 time_stamp = time.time()
时间戳转datetime datetime.datetime.fromtimestamp(time_stamp)
datetime转时间戳 int(time.mktime(today.timetuple()))
datetime转字符串 today_str = today.strftime("%Y-%m-%d")
字符串转datetime today = datetime.datetime.strptime(today_str, "%Y-%m-%d")
补时差 today + datetime.timedelta(hours=8)

四:日期格式化


  • %y 两位数的年份表示(00-99)

  • %Y 四位数的年份表示(000-9999)

  • %m 月份(01-12)

  • %d 月内中的一天(0-31)

  • %H 24小时制小时数(0-23)

  • %I 12小时制小时数(01-12)

  • %M 分钟数(00=59)

  • %S 秒(00-59)

  • %a 本地简化星期名称

  • %A 本地完整星期名称

  • %b 本地简化的月份名称

  • %B 本地完整的月份名称

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

  • %j 年内的一天(001-366)

  • %p 本地A.M.或P.M.的等价符

  • %U 一年中的星期数(00-53)星期天为星期的开始

  • %w 星期(0-6),星期天为星期的开始

  • %W 一年中的星期数(00-53)星期一为星期的开始

  • %x 本地相应的日期表示

  • %X 本地相应的时间表示

  • %Z 当前时区的名称

  • %% %号本身



  • 点赞

  • 收藏

  • 分享



    • 文章举报




vbirdbest
博客专家
发布了312 篇原创文章 · 获赞 943 · 访问量 135万+
他的留言板
关注

推荐阅读
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 原文链接:Python:获取“3年前的今天”的日期时间Python:getdatetimefor3yearsagotoday在Python中,如何获取3年前的今天的datetime ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
  • Java编程实现邻接矩阵表示稠密图的方法及实现类介绍
    本文介绍了Java编程如何实现邻接矩阵表示稠密图的方法,通过一个名为AMWGraph.java的类来构造邻接矩阵表示的图,并提供了插入结点、插入边、获取邻接结点等功能。通过使用二维数组来表示结点之间的关系,并通过元素的值来表示权值的大小,实现了稠密图的表示和操作。对于对稠密图的表示和操作感兴趣的读者可以参考本文。 ... [详细]
  • C语言的经典程序有哪些
    本篇内容介绍了“C语言的经典程序有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
author-avatar
呸了个安6_552
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有