年月日/时分秒
类名 | 功能说明 |
---|---|
time | 时间对象 |
date | 日期对象:year,month,day |
datetime | 日期时间对象:hour,minute,second,microsecond |
timedelta | 时间间隔 |
tzinfo | 时区信息对象 |
import time
import datetime
一、time模块
1、时间戳
print (time.time())
1703050921.7200177
2、格式化的字符串形式
%Y-%m-%d 年-月-日
%H:%M:%S==%X 时-分-秒
%A 星期
%x 日/月/年
print (time.strftime('%Y-%m-%d %H:%M:%S %A'))
print (time.strftime('%Y-%m-%d %X %A'))
print (time.strftime('%Y-%m-%d %X'))
print (time.strftime('%x %X %A'))
print (time.strftime('%Y'))
print (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
2023-12-20 17:46:46 Wednesday
2023-12-20 17:46:46 Wednesday
2023-12-20 17:46:46
12/20/23 17:46:46 Wednesday
2023
2023-12-20 17:46:46
3、结构化时间
tt = time.localtime()
print (tt)
print (tt.tm_year)
print (tt.tm_mon)
time.struct_time(tm_year=2023, tm_mon=12, tm_mday=22, tm_hour=10, tm_min=18, tm_sec=40, tm_wday=4, tm_yday=356, tm_isdst=0)
2023
12
二、datetime模块
res = datetime.datetime.now()
print (res) # 当前时间
print (res.replace(microsecond=0)) # 去除微妙
res = datetime.datetime.now() + datetime.timedelta(days=15) # 当前时间加15天
print (res)
print (datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
2023-12-22 10:22:12.653938
2023-12-22 10:22:12
2024-01-06 10:22:12.653938
2023-12-22 10:22:12
三、日期比较
1、时间类型转换
时间戳 —localtime/gmtime—> 结构化时间 —strftime—> 格式化的字符串时间
时间戳 <—mktime---------- 结构化时间 <—strptime— 格式化的字符串时间
time_str = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
time_array = time.strptime(time_str,'%Y-%m-%d %X')
timestamp = int(time.mktime(time_array))
print(f'time_str = {time_str}')
print(f'time_array = {time_array}')
print(f'timestamp = {timestamp}')
print ('格式化的字符串时间转为时间戳(秒级):' + str(timestamp))
time_str = 2023-12-22 10:48:23
time_array = time.struct_time(tm_year=2023, tm_mon=12, tm_mday=22, tm_hour=10, tm_min=48, tm_sec=23, tm_wday=4, tm_yday=356, tm_isdst=-1)
timestamp = 1703213303
格式化的字符串时间转为时间戳(秒级):1703213303
2、相同形式可对比
t1='2023/12/1'
t2='2023-12-1'
t3=datetime.date(2023, 12, 1)
t4=datetime.datetime(2023, 12, 1)
print("t1: {}\nt2: {}\nt3: {}\nt4: {}".format(t1,t2,t3,t4))
t1: 2023/12/1
t2: 2023-12-1
t3: 2023-12-01
t4: 2023-12-01 00:00:00
四.时间列的数据格式统一的方法
使用条件判断和自定义转换逻辑
import pandas as pd
import numpy as np
def custom_date_converter(date_str):
try:
return pd.to_datetime(date_str)
except:
# 在这里可以添加更多针对不同错误格式的处理逻辑
if '/' in date_str and '//' in date_str:
date_str = date_str.replace('//', '-').replace('/', '-')
return pd.to_datetime(date_str)
else:
return np.nan
complete_machine_data = pd.DataFrame({
'time': ['2024-10-06 00:00:00', '2024/12//12', '2024-10-07 00:00:00']
})
complete_machine_data['time'] = complete_machine_data['time'].apply(custom_date_converter)
print(complete_machine_data['time'])
在这个方法中:
定义了一个自定义函数 custom_date_converter,它首先尝试使用常规的 pd.to_datetime() 函数来转换日期时间字符串,如果转换成功则返回对应的 datetime 类型数据。
如果出现异常(也就是遇到格式错误的字符串),则在函数内部进一步判断字符串的格式情况(这里只是简单演示了处理包含 ‘//’ 和 ‘/’ 这种错误格式的情况,实际中可以根据更多不同的错误格式添加更复杂的处理逻辑),进行相应的格式修正后再尝试转换,如果最终还是无法转换,则返回 NaN(通过 numpy 库引入的缺失值表示)。
最后使用 apply 方法将这个自定义函数应用到 time 列的每个元素上,从而实现对不同格式数据的灵活处理,使 time 列数据格式统一(部分无法转换的标记为缺失值)。
https://www.cnblogs.com/DBArtist/p/python_datetime.html
https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/125611071