【问题标题】:Python Convert to %Y-%m-%d %H:%M With Different Length StringsPython 使用不同长度的字符串转换为 %Y-%m-%d %H:%M
【发布时间】:2018-04-23 19:32:54
【问题描述】:

我想将字符串转换为其中一种可能的格式(%d.%m.%Y %H:%M OR %d.%m.%Y %H:%M:%S OR %d. %m.%Y) 到 %Y-%m-%d %H:%M

目前我正在使用以下代码:

newMessageDate = log.get('messageDate')
        try:
            newMessageDate = datetime.datetime.strptime(newMessageDate,'%d.%m.%Y %H:%M').strftime('%Y-%m-%d %H:%M')
        except ValueError:
            newMessageDate = datetime.datetime.strptime(newMessageDate,'%d.%m.%Y %H:%M:%S').strftime('%Y-%m-%d %H:%M:%S') 

如果字符串在 %d.%m.%Y %H:%M 或 %d.%m.%Y %H:%M:%S 中,它工作正常,但我不知道如何添加第三种格式。我尝试将其添加为除外,但它永远不会被触发。

我是在正确的轨道上还是有更好的方法来做到这一点?

谢谢

【问题讨论】:

  • 您不能将“newMessageDate”的长度作为字符串来确定要转换为哪种格式吗?

标签: python python-3.x datetime strptime


【解决方案1】:

您可以列出可能的格式并一一尝试。

date_formats = ["%d.%m.%Y %H:%M", "%d.%m.%Y %H:%M:%S", "%d.%m.%Y", "%d.%m.%Y %H:%M"]
for date_fmt in date_formats:
    try:
        newMessageDate = datetime.datetime.strptime(newMessageDate, date_fmt).strftime('%Y-%m-%d %H:%M')
    except ValueError:
        continue
    else:
        break

【讨论】:

    【解决方案2】:

    您可以通过检查字符串的长度并使用三者中的相应格式来做到这一点,

    if len(newMessageDate)==15:
        newMessageDate = alpha
    elseif len(newMessageDate)==13:
        newMessageDate = beta
    elseif len(newMessageDate)==10:
        newMessageDate = gamma
    

    【讨论】:

    • 感谢您的快速回答。
    • 为了将来证明我的脚本,在日期长度不同的情况下这是最好的方法吗?即我会添加额外的 Else 语句来应对还是有更好的方法来提高脚本的性能?
    猜你喜欢
    • 2020-05-09
    • 2021-03-09
    • 2020-03-18
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    相关资源
    最近更新 更多