(十二)Python中级知识-时间模块之time与datetime

1、概述

Python 提供了 time、datetime模块用于时间相关的处理,如获取当前系统时间,时间格式化,时区识别等操作。
本文采用几个问题的方式进行描述,主要是一些常用的场景。
使用之前,先导入我们需要使用的这两个模块。


from datetime import datetime
from time import time

2、time.struct_time元组类型

举个对应数据类型的例子:

time.struct_time(tm_year=2020, tm_mon=3, tm_mday=13, tm_hour=12, tm_min=13, tm_sec=55, tm_wday=4, tm_yday=73, tm_isdst=-1)

是一个元组,与java类比的话可以理解成java.util.Date类,能获取毫秒数,获取年、月、日、时分秒等,有了这样一组数据结构之后我们就可以集中表示时间了。

gmtime() 、 localtime()strptime() 三个方法可以返回这个元组类型。

time.struct_time是一个带有 named tuple 接口的对象:可以通过索引和属性名访问值。这个元组结构里面包含的属性与值的描述信息,列举如下:

索引属性
0tm_year(例如,1993)
1tm_monrange [1, 12]
2tm_mdayrange [1, 31]
3tm_hourrange [0, 23]
4tm_minrange [0, 59]
5tm_secrange [0, 61]; 见 strftime() 介绍中的 (2)
6tm_wdayrange [0, 6] ,周一为 0
7tm_ydayrange [1, 366]
8tm_isdst0, 1 或 -1;如下所示
9tm_zone时区名称的缩写
10tm_gmtoff以秒为单位的UTC以东偏离

3、如何获取当前系统时间?

time和datetime都可以获取当前时间,但是输出格式是不同的。

举个例子:
import datetime
# 普通的时间格式化操作
import time

print("time获取当前时间:", time.time())
print("datetime获取当前时间:", datetime.datetime.now())
print("time获取当前一个可读的时间格式,是英文的:", time.asctime())
输出结果:
time获取当前时间: 1584086327.549221
datetime获取当前时间: 2020-03-13 15:58:47.549221
time获取当前一个可读的时间格式,是英文的: Fri Mar 13 15:58:47 2020

我们在实际项目中大都会再次进行格式化,处理为我们更容易理解的时间格式。

4、如何获取当前系统时区?

时区应用场景可能会在跨国家等地方用到,比如国内主要使用的时区是北京(东八区),国外如:东京(东九区)、伦敦(中时区)、纽约(西五区);

举个例子:
# 普通的时间格式化操作
import time

print("格林威治标准下的时区:", time.strftime("%z", time.gmtime()))
print("当地的时区:", time.strftime("%z", time.localtime()))
输出结果:
格林威治标准下的时区: +0800
当地的时区: +0800

关于时区可以看本文结尾处的参考资料。

5、如何格式化时间?

格式化时间一般是针对struct_time元组转字符串,字符串转struct_time元组等操作。

举个例子:
# 普通的时间格式化操作
import time

# 包含有对时区的操作
import datetime
# 普通的时间格式化操作
import time

print("获取当前时区下的时间struct_time元组:", time.localtime())
print("struct_time元组转字符串:", time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()))
print("字符串转struct_time元组:", time.strptime("2020-03-13 12:13:55","%Y-%m-%d %H:%M:%S"))

关键函数:strftime与strptime注意两个函数一字之差。

输出结果:
获取当前时区下的时间struct_time元组: time.struct_time(tm_year=2020, tm_mon=3, tm_mday=13, tm_hour=16, tm_min=4, tm_sec=27, tm_wday=4, tm_yday=73, tm_isdst=0)
struct_time元组转字符串: 2020-03-13 08:04:27
字符串转struct_time元组: time.struct_time(tm_year=2020, tm_mon=3, tm_mday=13, tm_hour=12, tm_min=13, tm_sec=55, tm_wday=4, tm_yday=73, tm_isdst=-1)

从例子中我们看到 字符串转换过程我们看到有%Y-%m-%d %H:%M:%S 类似的格式化符号,这个与Java中的"yyyy-MM-dd HH:mm:ss"格式化符号有一定的区别。

在Python3中格式化符合的描述信息,如下表所示:

序号指令意义
1%a本地化的缩写星期中每日的名称。
2%A本地化的星期中每日的完整名称。
3%b本地化的月缩写名称。
4%B本地化的月完整名称。
5%c本地化的适当日期和时间表示。
6%j十进制数 [001,366] 表示的年中日。
7%y十进制数 [00,99] 表示的没有世纪的年份。如19、20
8%Y十进制数表示的带世纪的年份。如2019、2020
9%m十进制数 [01,12] 表示的月。
10%d十进制数 [01,31] 表示的月中日。如01、02
11%H十进制数 [00,23] 表示的小时(24小时制)。
12%I十进制数 [01,12] 表示的小时(12小时制)。
13%M十进制数 [00,59] 表示的分钟。
14%p本地化的 AM 或 PM 。
15%S十进制数 [00,61] 表示的秒。
16%U十进制数 [00,53] 表示的一年中的周数(星期日作为一周的第一天)作为。在第一个星期日之前的新年中的所有日子都被认为是在第0周。
17%w十进制数 [0(星期日),6] 表示的周中日。
18%W十进制数 [00,53] 表示的一年中的周数(星期一作为一周的第一天)作为。在第一个星期一之前的新年中的所有日子被认为是在第0周。
19%x本地化的适当日期表示。
20%X本地化的适当时间表示。
21%z时区偏移以格式 +HHMM 或 -HHMM 形式的 UTC/GMT 的正或负时差指示,其中H表示十进制小时数字,M表示小数分钟数字 [-23:59, +23:59] 。可以输出时区
22%Z时区名称(如果不存在时区,则不包含字符)。
23%%字面的 ‘%’ 字符。

# 6、完整代码

import datetime
import time

print("time获取当前时间:", time.time())
print("datetime获取当前时间:", datetime.datetime.now())
print("time获取当前一个可读的时间格式,是英文的:", time.asctime())
print("========格式化与转换=========")
print("获取当前时区下的时间struct_time元组:", time.localtime())
print("struct_time元组转字符串:", time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()))
print("字符串转struct_time元组:", time.strptime("2020-03-13 12:13:55", "%Y-%m-%d %H:%M:%S"))
print("=========获取时区========")
print("格林威治标准下的时区:", time.strftime("%z", time.gmtime()))
print("当地的时区:", time.strftime("%z", time.localtime()))

输出:
time获取当前时间: 1584087845.7794068
datetime获取当前时间: 2020-03-13 16:24:05.779406
time获取当前一个可读的时间格式,是英文的: Fri Mar 13 16:24:05 2020
========格式化与转换=========
获取当前时区下的时间struct_time元组: time.struct_time(tm_year=2020, tm_mon=3, tm_mday=13, tm_hour=16, tm_min=24, tm_sec=5, tm_wday=4, tm_yday=73, tm_isdst=0)
struct_time元组转字符串: 2020-03-13 08:24:05
字符串转struct_time元组: time.struct_time(tm_year=2020, tm_mon=3, tm_mday=13, tm_hour=12, tm_min=13, tm_sec=55, tm_wday=4, tm_yday=73, tm_isdst=-1)
=========获取时区========
格林威治标准下的时区: +0800
当地的时区: +0800

7、总结

struct_time元组类型,这是可以当成java中的Date类来理解,就是一种数据结构。
时间格式化符号需要掌握一些常用的,如文中标黄的一些,可以重点关注,其余的可以在实践中回查。
datetime 没有更多的进行实践,可以参看文章结尾的链接,进行更深入的学习。

参考资料:
[1]、百度百科-时区
[2]、维基百科-时区
[3]、datetime官方链接

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值