Python time和datetime时间戳和时间字符串相互转换
时间戳是指格林威治时间1970年01月01日00时00分00秒开始计算所经过的秒数,是一个浮点数。
time和datetime都是Python中的内置模块(不需要安装,直接可以使用),都可以对时间进行获取,对时间格式进行转换,如时间戳和时间字符串的相互转换。
现在我们就使用这两个模块来对时间格式进行转换。
一、time获取当前时间
import time
print(time.time())
print(time.localtime())
print(time.localtime(time.time()))
运行结果:
1559120608.5015295
time.struct_time(tm_year=2019, tm_mon=5, tm_mday=29, tm_hour=17, tm_min=3, tm_sec=28, tm_wday=2, tm_yday=149, tm_isdst=0)
time.struct_time(tm_year=2019, tm_mon=5, tm_mday=29, tm_hour=17, tm_min=3, tm_sec=28, tm_wday=2, tm_yday=149, tm_isdst=0)
可以通过time.time()获取到当前的时间,默认是一个时间戳浮点数。
通过time.localtime()或time.localtime(time.time())都是获取到当前时间的struct_time,里面分别对应了当前时间的年、月、日、时、分、秒、一周的第几天(周一是0,0-6)、一年的第几天(从1开始,1-366)、夏时令(是夏时令1,不是0,不知道-1)。
二、time将时间戳转换成时间字符串
# 时间戳转换成时间字符串
time_str = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
print(time_str)
运行结果:
2019-05-29 17:08:35
三、time将时间字符串转换成时间戳
print(time.strptime(time_str, '%Y-%m-%d %H:%M:%S'))
# 时间字符串转换成时间戳
time_stamp = time.mktime(time.strptime(time_str, '%Y-%m-%d %H:%M:%S'))
print(time_stamp)
运行结果:
time.struct_time(tm_year=2019, tm_mon=5, tm_mday=29, tm_hour=17, tm_min=8, tm_sec=35, tm_wday=2, tm_yday=149, tm_isdst=-1)
1559120915.0
可以看到,不管是将时间戳转换成时间字符串,还是将时间字符串转换成时间戳,time模块都是通过struct_time来过渡的,也就是说,都需要先转换成struct_time,再用struct_time转换成想要的结果。
四、datetime获取当前时间
from datetime import datetime
print(datetime.now())
print(datetime.now().timetuple())
运行结果:
2019-05-29 17:22:37.343784
time.struct_time(tm_year=2019, tm_mon=5, tm_mday=29, tm_hour=17, tm_min=22, tm_sec=37, tm_wday=2, tm_yday=149, tm_isdst=-1)
可以通过datetime.now()获取到当前的时间,默认是一个datetime时间对象,样式是一个时间字符串的样式。
注意:导包时导入的是datetime包下的datetime模块。
导包方式不同,使用时也不同。
通过datetime对象的timetuple()方法可以获取到时间的struct_time。
五、datetime将datetime对象转换成时间字符串和时间戳
# datetime对象转换成时间字符串
datetime_str = datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S')
print(datetime_str)
# datetime对象转换成时间戳
datetime_stamp = datetime.timestamp(datetime.now())
print(datetime_stamp)
运行结果:
2019-05-29 17:22:37
1559121757.343784
六、datetime将时间字符串转换成时间戳
# 时间字符串转datetime对象,再转时间戳
datetime_stamp2 = datetime.timestamp(datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S'))
print(datetime_stamp2)
运行结果:
1559121757.0
七、datetime将时间戳转换成时间字符串
# 时间戳转datetime对象,再转时间字符串
datetime_str2 = datetime.strftime(datetime.fromtimestamp(datetime_stamp2), '%Y-%m-%d %H:%M:%S')
print(datetime_str2)
运行结果:
2019-05-29 17:22:37
在使用datetime进行时间戳和时间字符串之间的转换时,都是先转换成datetime对象,然后再做进一步的转转。
在实际工作中,我们也可以同时使用time和datetime两个模块,它们是可以混合使用的。
Python time和datetime时间戳和时间字符串相互转换时间戳是指格林威治时间1970年01月01日00时00分00秒开始计算所经过的秒数,是一个浮点数。time和datetime都是Python中的内置模块(不需要安装,直接可以使用),都可以对时间进行获取,对时间格式进行转换,如时间戳和时间字符串的相互转换。现在我们就使用这两个模块来对时间格式进行转换。一、time获取...
Python
处理
时间
和
时间戳
的内置模块就有
time
,和
datetime
两个,本文先说
time
模块。
关于
时间戳
的几个概念
时间戳
,根据1970年1月1日00:00:00开始按秒计算的偏移量。
时间
元组(
str
uct_
time
),包含9个元素。
time
.
str
uct_
time
(
tm
_year=2017,
tm
_mon=10,
tm
_mday=1,
tm
_hour=14,
tm
_min=21,
tm
_sec=57,
tm
_wday=6,
tm
_yday=274,
tm
_isdst=0)
时间
格式
字符串
,
字符串
形式的
时间
。
time
模块与
时间戳
和
时间
相关的重要函数
time
.
time
() 生成
关于
datetime
这个模块,可以说是平时不用的时候大家相安无事,一到用的时候,便会觉得有点混乱了,所以写下本篇文章,留待以后有需要使用,需要注意的是,文中的代码存在一些冗余,有一些代码片段可以替换为其他的格式或者自己自定义的内容,nevermind,总会有一些帮助的。
datetime
.
datetime
->
str
datetime
.
datetime
.now(tz=None)
>>>
datetime
.
datetime
(2022, 1, 20, 16, 45, 3
字符串
日期
时间
转换
成
时间戳
# '2015-08-28 16:43:37.283' --> 1440751417
def
str
ing2
time
stamp(
str
Value):
d =
datetime
.
datetime
.
strptime
(
str
Value, "%Y-%m-%d %H:%M:%S")
t = d.
time
tuple()
time
Stamp = int(
time
.mk
time
(t))
time
Stamp = float(
str
(
time
Stamp)
我们很多时候,特别是在生成任务的时候,都需要一个唯一标识
字符串
来标识这个任务,比较常用的有生成uuid或者通过
时间
来生成。uuid的话可以直接通过uuid模块来生成。如果是
时间
的话,可以这么写:
def tid_maker():
return '{0:%Y%m%d%H%M%S%f}'.format(
datetime
.
datetime
.now())
这里的
时间
精确到了微妙,一般来说不会重复,如果想更安全点,可以在后面多加几个随机
字符
,例如:
def tid_maker():
return '{0:%Y%m%d%H%M%S%f}'.format(
datetime
.
datetime
.now(
时间戳
一、获取
时间戳
获取系统
时间
的
时间戳
(较常用)获取世界标准时区的当前
时间
的
时间戳
(比北京
时间
少8小时,我很少用)二、
时间戳
和
DateTime
的
相互
转换
([原文](https://www.cnblogs.com/polk6/p/6024892.h
tm
l))二、时差计算([原文](http://blog.sina.com.cn/s/blog_ebcf9a0e0102v6m5.h
tm
l))
一、获取
时间戳
获取系统
时间
的
时间戳
(较常用)
/// <summary>
/// 获取
时间戳
datetime
模块提供了可以通过多种方式操作日期和
时间
的类。在支持日期
时间
数学运算的同时,实现的关注点更着重于如何能够更有效地解析其属性用于格式化输出和数据操作。
datetime
模块包括 data、
time
的所有功能,常用的 data
time
实例方法如下:
datetime
.now():获取当天的日期和
时间
datetime
.date(t):获取当天的日期,t 为
datetime
实例参数
datetime
.
time
(t):获取当天的
时间
,t 为
datetime
实例参数
datetime
.c
time
(t):获取【星期 月 日 时 分 秒 年】格式的
字符串
,t 为 dateti
做开发中难免
时间
类型之间的
转换
, 最近就发现前端js和后端django经常要用到这个
转换
, 其中jsDate.now()精确到毫秒,而
Python
中
Datetime
.
datetime
.now()是精确到微秒的。
1.
字符串
日期
时间
转换
成
时间戳
# '2015-08-28 16:43:37.283' --> 1440751417.283
# 或者 '2015-08-28 16:43:37' --> 1440751417.0
def
str
ing2
time
stamp(
str
Value):
d =
datetime
.
datetime
.
strptime
(
str
Value,
utcnow
时间戳
为RFC 3339(互联网上的日期和
时间
)格式的
字符串
,具有其他
时间戳
格式的
转换
功能或其他时区的
时间戳
。 此外,还可以从
datetime
objets和其他常见的日期实用程序
转换
时间戳
。 开发API接口时,请遵循现代惯例。
from utcnow import utcnow
utcnow . get ()
# "2077-03-01T09:33:07.139361Z" | The most common use case – get current server
time
.
# | Always uses UTC in the returned value.
utcnow . get ( "2020-02-26 09:10:10+00:00" )
# "2020-02-26T09:10:10.000000Z
# '2015-08-28 16:43:37.283' --> 1440751417.283
# 或者 '2015-08-28 16:43:37' --> 1440751417.0
def
str
ing2
time
stamp(
str
Value):
try: ...
time
stamp = 1629358800123 / 1000 # 将毫秒
转换
为秒
dt_object =
datetime
.
datetime
.from
time
stamp(
time
stamp)
print(dt_object.
str
f
time
("%Y-%m-%d %H:%M:%S.%f"))
输出结果为:2021-08-19 14:20:00.123000
其中,`from
time
stamp()`方法将
时间戳
转换
为
datetime
对象,`
str
f
time
()`方法将
datetime
对象
转换
为指定格式的
字符串
。在格式
字符串
中,`%f`表示毫秒。