ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python-日期时间操作

2021-10-07 01:31:07  阅读:270  来源: 互联网

标签:struct Python timestamp datetime 日期 tm time print 操作


原文地址:https://www.cnblogs.com/-beyond/p/15374829.html
转载请先联系博主!!!

目录

python中,有内置的time模块和datatime模块来支持时间的一些操作和转换。

time模块

struct_time元组

python中,有一种叫做struct_time元组的东西来描述时间,将时间细分了,比如:年、月、日、时、分、秒、一年中第几周、一年中第几天、是否为夏令时。

获取struct_time元组的方式,可以使用time模块的localtime()接口,如下面的例子:

import time

print(time.localtime())

输出结果如下:

time.struct_time(
	tm_year=2021,
	tm_mon=10,
	tm_mday=6,
	tm_hour=23,
	tm_min=47,
	tm_sec=52,
	tm_wday=2,
	tm_yday=279,
	tm_isdst=0
)

获取秒级时间戳

直接调用time模块的time()接口就可以获取秒级时间戳,不过需要注意的是:

  1. 获取的结果是一个float的浮点数,而并不是正数
  2. 不同版本python的执行结果,结果浮点数的精度是不一样的
import time

print(time.time())
# 输出秒级时间戳
# 不同版本的python,输出的结果精度是不一样的
# python2 -> 1633534293.33
# python3 -> 1633534364.272089

获取纳秒级别时间戳

python3中,time模块提供了time_ns()接口来获取当前时间的时间戳(纳秒级别

import time

timestamp_ns = time.time_ns()
print("timestamp_ns:%s" % timestamp_ns)
# timestamp_ns:1633536722569083000

时间戳转换为struct_time元组

假设现在从接口获取到了时间戳的数据,需要转换为struct_time元组进行操作,那么仍旧可以使用time模块的localtime(),传入时间戳即可,示例如下:

import time

# 获取时间戳
timestamp = time.time()
print("timestamp:%s" % timestamp)
# timestamp:1633535670.74

# 调用localtime()传入时间戳,会将其转换为struct_time元组
struct_time = time.localtime(timestamp)
print("struct_time:%s" % struct_time)
"""
struct_time:time.struct_time(
	tm_year=2021,
	tm_mon=10,
	tm_mday=6,
	tm_hour=23,
	tm_min=54,
	tm_sec=30,
	tm_wday=2,
	tm_yday=279,
	tm_isdst=0
)
"""

struct_time元组转换为时间戳

可以使用time模块的mktime()接口,接收的参数就是struct_time元组形式的数据,直接使用上一步的测试数据吧,示例如下:

import time

struct_time = (2021, 10, 6, 23, 54, 30, 2, 279, 0)
timestamp = time.mktime(struct_time)
print("timestamp:%s" % timestamp)
# timestamp:1633535670.0

从上面的结果可以看到,转换后的时间戳也是一个浮点型,只不过转换后的时间戳和之前的时间戳有点误差,之前的结果是1633535670.74,现在转换回来的是1633535670.0

ctime-稍微带点可读性的时间格式

上面的时间戳或者struct_time元组,可读性都不是很高,time模块有ctime()接口,可以获取一个可读性比较好的时间格式,为了方便记忆,我把这种格式叫做ctime格式

示例如下:

import time

print(time.ctime())
# Thu Oct  7 00:07:25 2021

time.ctime()接口还可以将时间戳转换为上面的那种格式,需要注意这里指的是秒级时间戳,示例如下:

import time

timestamp = time.time()
print("timestamp:%s" % timestamp)
# timestamp:1633536547.53

format_time = time.ctime(timestamp)
print("format_time:%s" % format_time)
# format_time:Thu Oct  7 00:09:07 2021

将struct_time元组转换为ctime形式

可以使用time模块的asctime()来将struct_time元组的时间转换为ctime形式

import time

struct_time = time.localtime()
print("struct_time:%s" % struct_time)
"""
struct_time:time.struct_time(
	tm_year=2021,
	tm_mon=10,
	tm_mday=7,
	tm_hour=0,
	tm_min=21,
	tm_sec=41,
	tm_wday=3,
	tm_yday=280,
	tm_isdst=0
)
"""

ctime = time.asctime(struct_time)
print("ctime:%s" % ctime)
# ctime:Thu Oct  7 00:21:41 2021

日期时间格式化

前面的时间戳、struct_timectime其实可读性都不太好,如果能有2021-10-08 10:30:11这种比较符合人类习惯的就好了。

当然了,pythontime模块提供了strftime()接口来实现日期时间格式化的功能,在格式化之前,需要先看一下一些格式的规则:

下面是使用的示例:

import time

struct_time = time.localtime()
format_time = time.strftime("%Y-%m-%d %H:%M:%S", struct_time)
print("format_time: %s" % format_time)
# format_time: 2021-10-07 00:30:20

日期时间的解析

前面讲了可以使用strftime()来将struct_time元组格式化为自定义的形式,但是现在要将自定义形式的日期时间解析为struct_time元组,此时就要用到strptime()接口了,使用示例如下:

import time

format_time = "2021-10-07 00:30:20"
# 传入时间日期,然后指定时间日期的格式,python会按照这个格式去解析
struct_time = time.strptime(format_time, "%Y-%m-%d %H:%M:%S")
print("struct_time: %s" % struct_time)
"""
struct_time: time.struct_time(
	tm_year=2021,
	tm_mon=10,
	tm_mday=7,
	tm_hour=0,
	tm_min=30,
	tm_sec=20,
	tm_wday=3,
	tm_yday=280,
	tm_isdst=-1
)
"""

自定义格式日期转换为时间戳

其实只需要将前面的接口组合一下就可以了,先使用strptime()按照指定格式解析日期,获取到struct_time元组后,使用mktime()即可将struct_time转换为时间戳,示例如下:

import time

format_time = "2021-10-07 00:30:20"
# 传入时间日期,然后指定时间日期的格式,python会按照这个格式去解析
struct_time = time.strptime(format_time, "%Y-%m-%d %H:%M:%S")

# 使用mktime()将struct_time转换为时间卓
timestamp = time.mktime(struct_time)
print("timestamp:%s" % timestamp)
# timestamp:1633537820.0

程序休眠一段时间

每个编程语言都有一个休眠函数,用来让当前的线程或者进程暂停运行(阻塞)一段时间,pythontime模块提供了sleep()接口,使用示例如下:

import time

print(time.time())  # 1633538882.96

# 休眠5秒
time.sleep(5)
print(time.time())  # 1633538887.96

# 休眠0.5秒
time.sleep(0.5)
print(time.time())  # 1633538888.47

datatime模块

datetime从名字上就能看出,是datetime两个的组合。

datetime模块有5个类很重要,分别是datetimedatetimetimedeltatzinfo,使用的比较多的就是datetime了。

获取当前日期时间

直接调用datetime类的now()方法即可获取可读性比较高的日期时间,示例如下:

# 从datetime模块导入datetime类
from datetime import datetime

print("datatime.new(): %s" % datetime.now())
# datatime.new(): 2021-10-07 00:55:24.152208

时间戳与datetime转换

  1. 提供了fromtimestamp()接口,传入时间戳即可将其转换为datetime
  2. 提供了timestamp()接口,将传入的datetime转换为时间戳;

示例如下:

# 从datetime模块导入datetime类
from datetime import datetime
import time

timestamp = time.time()
print("timestamp:%s" % timestamp)
# timestamp:1633539692.97

dt = datetime.fromtimestamp(timestamp)
print("datetime:%s" % dt)
# datetime:2021-10-07 01:01:32.968801

print("timestamp:%s" % datetime.timestamp(dt))
# timestamp:1633539777.946019

指定格式日期时间与datetime的转换

比如有个日期时间格式:2021-10-08 10:20:30,要转换为datetime,怎么搞?使用strptime

或者说有个datetime,要转换为2021-10-08 10:20:30形式,后面不需要小数点的形式?使用strftime()接口

# 从datetime模块导入datetime类
from datetime import datetime

format_time = "2021-10-08 10:20:30"

dt = datetime.strptime(format_time, "%Y-%m-%d %H:%M:%S")
print("datetime:%s" % dt)  
# datetime:2021-10-08 10:20:30

dt_now = datetime.now()
format_time = datetime.strftime(dt_now, "%Y-%m-%d %H:%M:%S")
print("format_time:%s" % format_time)
# format_time:2021-10-07 01:14:10

原文地址:https://www.cnblogs.com/-beyond/p/15374829.html
转载请先联系博主!!!

标签:struct,Python,timestamp,datetime,日期,tm,time,print,操作
来源: https://www.cnblogs.com/-beyond/p/15374829.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有