我的施工之路

施工之路已完成13篇图文,又提炼为思维导图,结合使用,效果最佳。

1我的施工计划

2数字专题

3字符串专题

4列表专题

5流程控制专题

6编程风格专题

7函数使用

8面向对象编程(上篇)

9面向对象编程(下篇)

10十大数据结构

11包和模块使用总结

12Python 正则使用专题总结 

13设计模式专题

今天是Python时间模块核心使用逻辑。本篇思维导图如下:

Python内置一个时间模块datetime,提供我们关于时间的表达。记录时间无所不在,日志文件,程序运行起始时间和时长,销量预测的特征等等,我们都能看到时间的身影。

这篇专题总结datetime模块最主要用法,希望通过此文,大家使用那些时间处理的常用API时,能信手拈来,不用help函数,不用搜索。

1 核心逻辑

datetime模块提供日期和时间各自分类的对象,日期处理相关的对象date,时间处理相关的time,日期和时间的完整结合对象datetime.

日期和时间的加减操作得到timedelta对象.

此时此刻 2020-8-28 21:45,这个时间是本地时间,很明显纽约时间肯定不是此值,柏林时间也肯定不是这个值。Python为支持不同地区的时间表达,特意抽象出tzinfo对象,并有一个默认实现对象.

以上就是datetime模块的几个核心对象以及对应的现实意义。

2 date、time和datetime对象

下面介绍最基本3个对象的最基本用法。首先,从datetime模块导入3个对象

In [1]: from datetime import date,time,datetime

构造一个日期date实例,2020年9月1日:

In [2]: date(2020,9,1)
Out[2]: datetime.date(2020, 9, 1)

构造一个时间time实例,10点10分0秒:

In [3]: time(10,10,0)
Out[3]: datetime.time(10, 10)

构造一个日期+时间的完整datetime实例,2020年9月1日 10点10分0秒:

In [4]: datetime(2020,9,1,10,10,10)
Out[4]: datetime.datetime(2020, 9, 1, 10, 10, 10)

自己构造时间没什么意义,更有意义的是打印当前时间,比如此时程序启动打印下时间,如果程序可能运行十几天,很明显使用日期+时间的完整datetime实例。

此方法归属于datetime类上的方法,所以无须构造datetime实例,直接如下:

datetime.today() # datetime类的today方法
Out[5]: datetime.datetime(2020, 8, 28, 22, 0, 47, 439509)

打印结果显示年月日时分秒毫秒 还可以使用类方法now:

In [6]: datetime.now()
Out[6]: datetime.datetime(2020, 8, 28, 22, 1, 28, 737166)

直接打印当前时间,返回日期+时间的字符串结果:

In [7]: print(datetime.now())
2020-08-28 22:02:57.217572

如果我们不想显示毫秒,这就涉及到日期+时间的打印格式化问题。使用datetime类方法strftime(string format time),用法如下:

In [8]: datetime.strftime(datetime.now(),'%Y-%m-%d %H:%M:%S')
Out[8]: '2020-08-28 22:06:20'

这就涉及到打印格式化字符,常用的几个:

字符 意义
%Y 完整的年份
%y 去掉世纪的年份
%m 月份(01 - 12)
%d 一个月中的第几天(01 - 31)
%H 一天中的第几个小时(24小时制,00 - 23)
%M 分钟数(00 - 59)
%S 秒(01 - 61)
%w 一个星期中的第几天(0 - 6,0是星期天)
%Z 时区的名字(如果不存在为空字符)

如果读入一个时间列,此时type为str,为了对此作时间运算,需要将其转化为datetime,使用strptime(string parse time),它是datetime的类方法:

In [11]: datetime.strptime('2020-08-28 22:06:20','%Y-%m-%d %H:%M:%S')
Out[11]: datetime.datetime(2020, 8, 28, 22, 6, 20)

字符型日期+时间要想正确转化为datetime对象,字符串和格式必须要匹配,否则会抛错:

In [13]: datetime.strptime('2020-08-28 22:06:20',\'%Y/%m/%d %H:%M:%S') ValueError: time data '2020-08-28 22:06:20'
does not match format '%Y/%m/%d %H:%M:%S'

3 基本运算

有时需要求偏离某个时间的时间,timedelta对象能满足此需求。

比如,求当前时间的前12小时的日期+时间。

首先,导入timedelta类:

In [15]: from datetime import timedelta

直接使用当前时间减去timedelta表示的12小时长度,注意第一个参数的含义为days,所以除以 24:

In [16]: datetime.now() - timedelta(12/24)
Out[16]: datetime.datetime(2020, 8, 28, 10, 22, 44, 287246)

由上面这个用法,可以总结为:

datetime1 - timedelta1 = datetime2

所以 datetime1 - datetime2 = timedelta1,故两个时间相减得到timedelta类型的实例。

除此之外,还有一个小方法,可能会用到,就是datetime类上的combine方法,它能组合date实例和time实例为datetime实例,如下所示:

In [17]: datetime.combine(date(2020,9,1),time(10,10,0))
Out[17]: datetime.datetime(2020, 9, 1, 10, 10)

4 关于tzinfo

为了更好统一全球时间,世界规定了一个UTC时间,即全球统一时间,比如假设与之相比北京时间比它早8小时,曼谷比它早7小时等。

比如打印当前时间时,

```python
In [6]: print(datetime.now())
2020-08-28 22:33:35.393709

以上显示的这个时间,其实并不完整,我当然明白它是我所在地的时间,但是其他国家的开发者看到这个时间时,或许以为是UTC标准下的时间。若是这样解读,显然会和实际有一个时差问题。

有的读者会说,我在打印格式化时添加时区信息可以吗,我们实验一下:

In [19]: datetime.strftime(datetime.now(),\'%Y-%m-%d %H:%M:%S %Z')
Out[19]: '2020-08-28 22:39:44 '

时区信息为空,所以没能解决问题。之所以时区信息会为空,是因为datetime.now()时未给定tzinfo值。

所以,我们需要自己重新定义一个tzinfo,即实现一个tzinfo对象。

此类BJinfo继承tzinfo,然后实现其中的3个方法:

from datetime import tzinfoclass BJinfo(tzinfo):"""BJinfo"""def utcoffset(self, dt):return timedelta(hours=8)def tzname(self, dt):return "UTC 8"def dst(self, dt):return timedelta(hours=8)

此时再打印当前时间时,赋上tzinfo值:

nowt = datetime.now(tz=BJinfo())
In [32]: In [6]: print(nowt)
2020-08-28 22:52:20.328446+08:00

再格式化打印时区信息:

In [36]: datetime.strftime(nowt,\ ...:     '%Y-%m-%d %H:%M:%S %Z')
Out[36]: '2020-08-28 22:52:20 UTC 8'

透过时区信息BJinfo 定义的三个方法,便能确认时间2020-08-28 22:52:20是比UTC快8个小时的时区下,所对应的一个时间。

总结

以上就是本专题对datetime模块核心对象的使用总结,大纲如下:

  • 1 核心逻辑

  • 2 date、time和datetime对象

  • 3 基本运算

  • 4 关于tzinfo

  • 总结

全部手写,完全原创。若觉得有帮助,欢迎给个在看、点个赞,漫长施工之路上,我会更有动力坚持下去,谢谢。

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑获取一折本站知识星球优惠券,复制链接直接打开:https://t.zsxq.com/662nyZF本站qq群1003271085。加入微信群请扫码进群(如果是博士或者准备读博士请说明):

【Python基础】Python时间模块,超实用总结!相关推荐

  1. python学习总结----时间模块 and 虚拟环境(了解)

    python学习总结----时间模块 and 虚拟环境(了解) time- sleep:休眠指定的秒数(可以是小数) - time:获取时间戳# 获取时间戳(从1970-01-01 00:00:00到 ...

  2. Python基础-Python基础使用

    Python基础-Python基础使用 1.Python解释器 在Python文件的开头加入以下代码就制定了解释器. #!/usr/bin/env python # _*_ coding:utf-8 ...

  3. python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值

    python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值 一 .函数概念 函数是根据需要,将代码打包为代码块, 每一个代码块就可以封装为一个函数 ...

  4. python自学时间-python基础学习时间time和datetime模块

    时间模块time和datetime() 时间表现为三种格式 1.时间戳 2.时间元组 3.格式化字符串(2017-11-1) 时间戳:通常来说时间戳表示的是从格林威治1970年1月1日00:00:00 ...

  5. Python全栈开发之路 【第六篇】:Python基础之常用模块

    本节内容 模块分类:好处:标准库:help("modules") 查看所有python自带模块列表第三方开源模块:自定义模块:模块调用: import modulefrom os ...

  6. Python基础之pyautogui模块(详细总结鼠标键盘操作)

    Python基础之鼠标操作 文章目录 Python基础之鼠标操作 1. GUI 控制功能 1.1 自动 防故障功能 1.2 停顿功能 2. 鼠标操作 2.1 控制鼠标移动 2.2 控制鼠标点击 2.3 ...

  7. python内建时间模块 time和datetime

    时间模块 UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间.在中国为UTC+8.DST(Daylight Saving Time)即夏令时. ...

  8. LINUX C系统编程与PYTHON中的时间模块对比

    今天看python时间模块time的时候发现和LINUX系统编程中的时间调用函数基本一样,以前刚好没有好好学习LINUX C编程的时间模块就对比进行了学习. 本文只是给出函数接口和使用方式,详细了解请 ...

  9. Python基础概念_6_模块

    模块 7 模块 7.1 简介 在上一章里我们知道了如何创建和使用函数.如果你想要在其它程序中重用很多函数,那么你该如何实现呢?你可能已经猜到了,答案是使用本章要讲的模块. 模块可以让你能够有逻辑的组织 ...

  10. python基础之heapq模块(堆模块)

    堆是一种数据结构,本质上是一种二叉树.在python中可以使用heapq模块实现,heapq可以实现一个简单的优先级队列. 一.堆的性质 堆分为小根堆与大根堆,小根堆的第一个元素可以理解为数值最小的元 ...

最新文章

  1. 一款轻量级的桌面WebServer通讯组件
  2. python mysql库对比_mysqlclient和PyMySQL对比
  3. Qt在Windows下的三种编程环境搭建
  4. AngularJS学习之旅—AngularJS Http(九)
  5. 浅析STL allocator
  6. 刚入行的测试工程师如何自学软件测试【下篇】-- 软实力
  7. ubuntu 中 notepad 安装
  8. UML设计中的箭头详解
  9. opencv 访问图像的像素方法和算法用时的计算
  10. 运维面试官喜欢问的问题
  11. 柴静雾霾调查:穹顶之下 同呼吸共命运
  12. 华为云照片的爬虫程序更新(python3.6)
  13. 01_ROS_Introduction
  14. 解决导出Excel报COM类工厂错误的办法--修改版
  15. 路由器pppoe拨号服务器无响应,pppoe服务器无响应
  16. 低噪声放大器核心电路设计
  17. 【Beta阶段】第八次Scrum Meeting
  18. 缀点成线(Java算法每日一题)斜率公式
  19. 华为HCIP安全 722
  20. Termux的使用方法

热门文章

  1. Object 标签遮挡 Div 显示
  2. Misunderstood-Missing-逆向DP
  3. Mininet 系列实验(一)
  4. 本周个人总结(软件的初步开发)
  5. Filter 字符编码Filter 一
  6. iOS编程——经过UUID和KeyChain来代替Mac地址实现iOS设备的唯一标示(OC版)
  7. 真正优秀的程序员有哪些与众不同之处?
  8. 【转载】C ++ 基础 指针 引用
  9. PHP 4 中对象的比较
  10. 人工智能学习--文本识别实践-tesseract-ocr