时间的三种存在方式:时间对象,时间字符串,时间戳。


时间对象,比如前面介绍的 date datetime time 对象等;时间字符串,如:“2021-11-15”;时间戳,如 time.time() 返回的就是时间戳。


在数据处理过程中,经常会遇到需要将不同形式的时间进行转换。这里给大家介绍下常用的方法:


1 时间对象转字符串



时间对象转换为字符串,可以通过 isoformat strftime 方法来实现。


strftime 的英文全称是 str format time ,根据给定的格式将时间对象转换为字符串。




# 将date时间对象转换为字符串
import datetime

d1 = datetime.date(2021,11,15)
print(d1)
#表示日期和时间的国际标准是ISO8601。该标准旨在提供日期和时间表示的格式,没有任何歧义。
print(d1.isoformat())

# 用srtftime来转换
# YYYY-MM-DD 形式
print(d1.strftime('%Y-%m-%d'))

# 将time时间对象转换为字符串
t1 = datetime.time(20,10,1)
print(t1.strftime('%H:%M:%S'))

# 将datetime时间对象转换为字符串
dt2 = datetime.datetime.now()
print(dt2.strftime('%Y-%m-%d %H:%M:%S'))
print(dt2.isoformat())

Python 内置时间模块:Datetime-时间转换_数据处理

运行结果:

Python 内置时间模块:Datetime-时间转换_字符串转换_02Python 内置时间模块:Datetime-时间转换_字符串转换_03

 2 字符串转时间对象


字符串转时间对象,用的是 strptime 方法,与 strftime 方法刚好相反。


strptime 的英文全称是 str parse time ,将字符串解析为给定相应格式的时间对象。




#字符串转换成时间对象
s1 = '2020-10-09'
d = datetime.datetime.strptime(s1,'%Y-%m-%d')
print(d)

Python 内置时间模块:Datetime-时间转换_时间对象_04

运行结果:

Python 内置时间模块:Datetime-时间转换_时间戳_05Python 内置时间模块:Datetime-时间转换_字符串_06

 3 时间戳转换为时间对象


时间戳是指格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒 (北京时间 1970 年 01 月 01 日 08 时 00 分 00 秒) 起至现在的总秒数。




# 获取当前的时间戳
import time
ts_1 = time.time()
print(ts_1)

# 获取当天00:00:00的时间戳
ts_2 = int(time.time()/86400)*86400
print(ts_2)

# 获取当天23:59:59的时间戳 一 天 有 24*60*60 = 86400 秒
ts_3 = int(time.time()/86400)*86400+86400-1
print(ts_3)

#将时间戳转换为时间对象
print(datetime.datetime.fromtimestamp(ts_1))

Python 内置时间模块:Datetime-时间转换_数据处理_07

运行结果:


Python 内置时间模块:Datetime-时间转换_时间戳_08Python 内置时间模块:Datetime-时间转换_时间对象_09


 

4 将时间对象转换为时间戳


鉴于,时间戳是指格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒 (北京时间 1970 年 01 月 01 日 08 时 00 分 00 秒) 起至现在的总秒数。


因此,将时间对象转换为时间戳时,直接计算两个时间对象的 timedelta ,并将 timedelta 以 “秒” 来表示就可以了。




# 注意这里要用北京时间
dt_s = datetime.datetime(1970,1,1,8)
print(dt_s)
dt1=datetime.datetime(2021, 11, 15, 20, 10, 1)
timedelta_1 = dt1 -dt_s
# 返回时间间隔包含了多少秒
timedelta_s = timedelta_1.total_seconds()
print(timedelta_s)

#将时间戳转换为时间对象
print(datetime.datetime.fromtimestamp(timedelta_s))

Python 内置时间模块:Datetime-时间转换_时间戳_10

运行结果:

Python 内置时间模块:Datetime-时间转换_时间戳_11Python 内置时间模块:Datetime-时间转换_数据处理_12