Python 将字符串列表转换为日期时间
我正在尝试将字符串列表转换为datetime 下面是我正在处理的数据示例:Python 将字符串列表转换为日期时间,python,datetime,python-datetime,timedelta,Python,Datetime,Python Datetime,Timedelta,我正在尝试将字符串列表转换为datetime 下面是我正在处理的数据示例: x=['59:55:00','59:55:00','59:58:00','1:00:02','1:00:05','1:01:26'] 例如,该列表应该反映59分钟、58秒到1小时、0分钟和5秒 我知道这是一个古怪的格式,但我在玩我已经处理的手。我不确定当我进入大于59分钟的值时如何处理数据 我尝试使用: from datetime import datetime for i in x: datetime_obje
x=['59:55:00','59:55:00','59:58:00','1:00:02','1:00:05','1:01:26']
例如,该列表应该反映59分钟、58秒到1小时、0分钟和5秒
我知道这是一个古怪的格式,但我在玩我已经处理的手。我不确定当我进入大于59分钟的值时如何处理数据
我尝试使用:
from datetime import datetime
for i in x:
datetime_object = datetime.strptime(i, '%M:%S:%f')
print(datetime_object)
我的结果是:
1900-01-01 00:59:55
1900-01-01 00:59:55
1900-01-01 00:59:58
1900-01-01 00:01:00.020000
1900-01-01 00:01:00.050000
1900-01-01 00:01:01.260000
我想把我的输出保持在分和秒。
例如1:01:26
将是00:61:26
因此,我期望的输出如下所示:
1900-01-01 00:59:55
1900-01-01 00:59:55
1900-01-01 00:59:58
1900-01-01 00:60:02
1900-01-01 00:60:02
1900-01-01 00:61:26
非常感谢任何帮助或指导 可能
strtime
不是这里的正确工具(为了简洁起见,省略了一些错误检查):
>time=datetime.datetime.now()
>>>halfformatted=time.strftime('00:{minutes}:%S.%f')
>>>分钟总数=time.hour*60+time.min
>>>半格式化。格式化(分钟=分钟总数)
'00:358:33.339341'
如果保证数据不会返回到以前的格式,我们可以对其进行规范化。为了保持整洁,最好将其包装在生成器中,这样就不会使主要应用程序逻辑混乱。例如:
def标准化(次):
hms=错误
最后一分钟=0
对于x中的t:
h、 m,s=[int(i)表示t.split中的i(“:”)]
如果不是hms:
如果h<最后一分钟:
hms=真
其他:
h、 m,s=0,h,m
最后一分钟=m
收益率f'{h:02}:{m:02}:{s:02}'
x=['59:55:00','59:55:00','59:58:00','1:00:02','1:00:05','1:01:26']
对于标准化(x)中的v:
印刷品(五)
导致
00:59:55
00:59:55
00:59:58
01:00:02
01:00:05
01:01:26
现在,在循环中,您可以做任何您想做的事情。
datetime。datetime
对象必须采用一定范围内的参数,即分钟数必须介于0
和59
之间。但是,您可以创建一个类来处理此所需的行为。该类可以将输入转换为所需的时间戳格式,存储原始字符串,并提供一个to_date
属性,以将实际时间戳检索为datetime。datetime
对象:
import datetime
class Minutes:
d = datetime.datetime.now()
def __init__(self, _str, _year = None):
self._val = _str
d = datetime.datetime.now()
self.year = _year if _year is not None else '-'.join(str(getattr(d, i)) for i in ['year', 'month', 'day'])
@property
def to_date(self):
return datetime.datetime(*map(int, self.year.split('-')), *map(int, str(self).split(':')))
def __str__(self):
_h, _m, _s = map(int, self._val.split(':'))
h, m, s = 0 if _h else _h, _m+(_h*60) if _h else _m, _s
return f'{self.year} '+':'.join(str(i).zfill(2) for i in [h, m, s])
def __repr__(self):
return str(self)
x = ['59:55:00', '59:55:00', '59:58:00', '1:00:02', '1:00:05', '1:01:26']
new_x = [Minutes(i, '1900-01-01') for i in x]
输出:
1900-01-01 00:59:55
1900-01-01 00:59:55
1900-01-01 00:59:58
1900-01-01 00:60:02
1900-01-01 00:60:05
1900-01-01 00:61:26
[1900-01-01 00:3595:00,
1900-01-01 00:3595:00,
1900-01-01 00:3598:00,
1900-01-01 00:60:02,
1900-01-01 00:60:05,
1900-01-01 00:61:26]
您的列表包含持续时间,而不是时间
datetime.timedelta
就是为了这个目的而设计的,但是如果您想要一个非常特定的字符串格式来输出,就没有必要了
输入数据的问题是格式不一致。如果您愿意硬编码第一部分的限制值,可以通过三元语句应用切换:
from datetime import timedelta
x = ['59:55:00', '59:55:00', '59:58:00', '1:00:02', '1:00:05', '1:01:26']
def converter(value, limit=59):
var1, var2, var3 = map(int, value.split(':'))
switch = var1 < limit
mins = var1 * 60 + var2 if switch else var1
secs = var3 if switch else var2
return f'00:{mins:02}:{secs:02}'
res = list(map(converter, x))
print(res)
# ['00:59:55', '00:59:55', '00:59:58', '00:60:02', '00:60:05', '00:61:26']
从日期时间导入时间增量
x=['59:55:00','59:55:00','59:58:00','1:00:02','1:00:05','1:01:26']
def转换器(值,极限=59):
var1,var2,var3=map(int,value.split(':'))
开关=var1<极限
mins=var1*60+var2如果开关else var1
secs=var3如果开关else var2
返回f'00:{mins:02}:{secs:02}'
res=列表(映射(转换器,x))
打印(res)
# ['00:59:55', '00:59:55', '00:59:58', '00:60:02', '00:60:05', '00:61:26']
是否可以保证,一旦从%M:%S:%f转换到%H:%M:%S,它将不会返回到以前的格式?您的数据不明确@克里尚对如何消除歧义有一个好主意。但是您需要回答他的问题。您可以使用timedelta
对象并使用total_seconds()
方法来计算秒数、分钟数和小时数。@ChrisHunt数据不会返回到以前的格式
from datetime import timedelta
x = ['59:55:00', '59:55:00', '59:58:00', '1:00:02', '1:00:05', '1:01:26']
def converter(value, limit=59):
var1, var2, var3 = map(int, value.split(':'))
switch = var1 < limit
mins = var1 * 60 + var2 if switch else var1
secs = var3 if switch else var2
return f'00:{mins:02}:{secs:02}'
res = list(map(converter, x))
print(res)
# ['00:59:55', '00:59:55', '00:59:58', '00:60:02', '00:60:05', '00:61:26']