加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

time和datetime时间模块怎么使用 有什么内容

发布时间:2023-09-02 12:31:05 所属栏目:语言 来源:
导读:这篇文章主要讲解了“time和datetime时间模块怎么使用,有哪些内容”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编

这篇文章主要讲解了“time和datetime时间模块怎么使用,有哪些内容”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。

time时间模块

import time

time -- 获取本地时间戳

时间戳又被称之为是Unix时间戳,原本是在Unix系统中的计时工具。

它的含义是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。UNIX时间戳的 0 按照ISO 8601规范为 :1970-01-01T00:00:00Z。

比如:

时间戳 60 表示 1970-01-01T00:01:00Z

时间戳 120 表示 1970-01-01T00:02:00Z

时间戳 3600 表示 1970-01-01T01:00:00Z

小知识:最开始的时候,时间戳的开始年份是1971年,那个时候Unix系统和C语言刚刚诞生,所以时间戳0也就是Unix系统和C语言的生日。那时候的时间位数只有32位,而且每秒中有60个数字,发现只要两年多的时间时间戳就能完成一个轮回,十分的不方便!所以后来的一系列改革,将时间戳的数值改为每秒1个数字,还有一些新的系统可以将时间戳的位数增大,可以让时间戳的轮回扩展到一百多年,再后来为了方便人们记忆,将时间戳的起始年份定位1970年整。

import time

stamp_time = time.time()

print(stamp_time) # 1635768368.2838552

localtime -- 获取本地时间元组(UTC)

参数为时间戳,默认为本地时间戳,获取时间元组。

时间元组是python中的一个特殊的数据类型type: time.struct_time,但是它和tuple的特性是相同的。

import time

# 时间元组中的值分别表示:

# tm_year: 年

# tm_mon: 月

# tm_mday: 日

# tm_hour: 时

# tm_min: 分

# tm_sec: 秒

# tm_wday: 周几(0表示星期一)

# tm_yday: 一年中的第几天(从1开始)

# tm_isdst: 夏令标识(1夏令时、0非夏令时、-1未知)

 

# 默认当前时间

time_tuple = time.localtime()

print(time_tuple)

# time.struct_time(tm_year=2021, tm_mon=11, tm_mday=1, tm_hour=20, tm_min=7, tm_sec=50, tm_wday=0, tm_yday=305, tm_isdst=0)

# 指定时间戳

time_tuple = time.localtime(3600)

print(time_tuple)

# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=9, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

有大问题啦!!!

时间戳的起始时间是1970-1-1 0:0:0, 这个时候的时间戳是0,那么时间戳3600就是整整一个小时之后,那么时间就应该是1970-1-1 0:1:0 才对的呀!怎么上面的3600确实9点钟了呢?怎么起始时间变成了8点了呢?

然后你发现你在中国,时间是北京时间,北京在东八区时区,嘶,怎么正好也是个八?

是这样的,按照道理来说的话全世界任何一个地方的时间戳所代表的时间都应该是一样的,而且时间戳的起始时间确实是 1970-1-1 0:0:0 ,但是这个时间是位于英国的一个叫做格林威治的小镇的,格林威治有一个天文台叫做皇家格林尼治天文台,后来国际上将这个地方的经线作为本初子午线,作为时间计算时间和地理精度的起点。那么,有时区的存在打破了这个可能,我们在中国,所有的设备都是按照中国的时区编码的,中国位于东八区,在时间上比英国快八个小时,所以我们中国的本地时间戳就是 1970-1-1 8:00:00。

gmtime -- 获取时间元组(GMT)

注意:

参数必须是时间元组time.struct_time 或者元组 tuple 类型;

元组中的元素一个也不能少,必须九个元素都存在;

得到的时间戳只收到前六个值的影响,即:年月日时分秒;

时间元组中的时间表示,最小时间不能低于当地的最小时间戳;

时间元组中的时间表示,单位可以超出原本的范围,比如秒满60进1,我们将秒写成100,系统也不会报错,但是时间上会自动的将多出的时间进位。但是数字也不能过大,因为数据类型的大小是有极限的。

mktime返回的数值是浮点型的,但是精度只能到1;

import time

# 在中国的最小时间单位

tst = (1970, 1, 1, 8, 0, 0, 0, 0, 0)

time_stamp = time.mktime(tst)

print(time_stamp) # 0.0

ctime -- 获取时间字符串

参数默认为本地时间戳,获取的数据类型是 str,这个时间字符串不像时间元组是一个单独的数据类型。

import time

# 时间字符串中的含义是:

# Mon Nov 1 21:34:39 2021

# 星期 月 日 时 分 秒 年

# 默认为本地时间戳

time_char = time.ctime()

print(time_char) # Mon Nov 1 21:34:39 2021

# 指定时间戳

time_char = time.ctime(0)

print(time_char) # Thu Jan 1 08:00:00 1970

asctime -- 时间元组获取时间字符串

注意,asctime有弊端,看下例:

import time

tst = (1970, 1, 1, 8, 24, 61, 1, 0, 0)

time_char = time.asctime(tst)

print(time_char) # Tue Jan 1 08:24:61 1970

tst = (1970, 1, 1, 8, 24, 61, 2, 0, 0)

time_char = time.asctime(tst)

print(time_char) # Tue Jan 1 08:24:61 1970

看上面的例子,时间元组变成时间字符串的时候,会将星期的数据也读取到,但是却不会分辨数据是否正确,所以asctime并不常用。

如果要将一个不确定正确性的时间元组变成时间字符串的话,先通过 mktime 获取时间戳(mktime可以分辨出正确的时间信息),然后在将时间戳通过 ctime 变成时间字符串。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章