【问题标题】:python date time string to time formatpython日期时间字符串到时间格式
【发布时间】:2020-05-29 01:46:07
【问题描述】:

我正在将数据框中的时间转换为 datetime.time 格式。 原来的时间格式是这样的:

420, 441, 31, 158

类似的东西。所以数据中没有秒,只有小时和分钟。

我编写了一个代码将该字符串转换为 datetime.time 格式,

time = datetime.strptime(str(time, '%H%M').time()

它可以正常工作,但是在分析数据的过程中,我在应用代码时意识到了一些错误。

例如,原来记录的时间是01:58,但是在dataframe中,它保存了像158这样的形式。当我应用代码时,它把时间转换为15:08,这与原始文档相比是不正确的。

但问题是 01:58 和 15:08 都会将表单保存在数据框中的相同值中,即 158。

那么,如何处理这个问题呢? 现在好像没有解决办法,只能把原始文档保存成不同的时间格式。

【问题讨论】:

  • 你肯定要先解决输入数据不明确的问题;如果 158 既可以是 15:08 也可以是 1:58,没有什么可以帮助您
  • 我认为这个问题无法回答——首先你要找出解释输入数据的逻辑规则;何时您可以判断 111 是 1:11 还是 11:10 - 只有这样您才能开始实施转换 - 任何已经回答的都可能有效 - 取决于输入数据

标签: python datetime time format


【解决方案1】:

这是使用str.zfill 的一种方法,假设您有 4 位数字。

例如:

import datetime

data = ["420", "441", "31", "158"]

for time in data:
    print(datetime.datetime.strptime(time.zfill(4), '%H%M').time())

输出:

04:20:00
04:41:00
00:31:00
01:58:00

【讨论】:

  • 如果是 111?是 1:11 还是 11:10?
  • @Drako。那是一个有效的场景。 OP 必须确认这一点
  • 您的代码很好 - 要求未知 - 结果 - 您的代码可能有效 :) 也可能无效 :)
  • 为什么需要zfill()
【解决方案2】:
 import time

test=[420, 441, 31, 158]

string=str(test[2])

if len(string)<3:
    h=str(0)
    m=string[:]

else:
    h=string[:1]
    m=string[1:]

timesss=h+"/"+m

aa=time.strptime(timesss, '%H/%M')

输出

print(aa) --> time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=31, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)
print(aa[3]) --> 0
print(aa[4]) --> 31
print(type(aa)) --> <class 'time.struct_time'>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    相关资源
    最近更新 更多