gpt4 book ai didi

python - 更改字符串的时间格式

转载 作者:行者123 更新时间:2023-11-28 16:38:54 25 4
gpt4 key购买 nike

我想写一个函数来改变时间格式,用一个偏移量来移动日期

比如我有一个字符串

"this is a string 2012-04-12 23:55 with a 2013-09-12 timezone"

我想把它改成类似的东西

"**this is a string 20-Apr-2012 13:40 with a 19-Sep-2013 timezone**"

也就是说,数据的格式从 yyyy-mm-dd 变为 dd-bbb-yyyy 并且日期偏移了偏移量。

我编写了以下函数,但它只给出“这是一个字符串 20-Jun-2012 13:40,时区为 2013-11-12”

import re
import time
import datetime

def _deIDReportDate(report, offset=654321):
redate = re.compile(r"""([0-9]+-[0-9]+-[0-9]+\s+[0-9]+:[0-9]+)|([0-9]+-[0-9]+-[0-9]+)""")
match = redate.search(report)
for match in redate.finditer(report):
dt = match.group()
if len(dt) > 10:
dt = datetime.datetime.strptime(dt, '%Y-%m-%d %H:%M')
dt += datetime.timedelta(seconds=offset)
new_time = dt.strftime('%d-%b-%Y %H:%M')
newReport = report[:match.start()] + new_time + report[match.end():]
return newReport
else:
dt = datetime.datetime.strptime(dt, '%Y-%m-%d')
dt += datetime.timedelta(seconds=offset)
new_time = dt.strftime('%d-%b-%Y')
newReport = report[:match.start()] + new_time + report[match.end():]
return newReport

任何人都可以帮助修复/改进我的代码吗?

最佳答案

你的错误是由于你试图调用 report.groups();您从未在 report 参数上应用正则表达式。

您的代码可以大大简化:

_dt = re.compile(r"""
[12]\d{3}- # Year (1xxx or 2xxx),
[0-1]\d- # month (0x, 1x or 2x)
[0-3]\d # day (0x, 1x, 2x or 3x)
(?:\s # optional: time after a space
[0-2]\d: # Hour (0x, 1x or 2x)
[0-5]\d # Minute (0x though to 5x)
)?
""", flags=re.VERBOSE)

def _deIDReportDate(report, offset=654321):
def replace(match):
dt = match.group()

if len(dt) > 10:
# with time
dt = datetime.datetime.strptime(dt, '%Y-%m-%d %H:%M')
dt += datetime.timedelta(seconds=offset)
return dt.strftime('%d-%b-%Y %H:%M')

dt = datetime.datetime.strptime(dt, '%Y-%m-%d')
dt += datetime.timedelta(seconds=offset)
return dt.strftime('%d-%b-%Y')

return _dt.sub(replace, report)

replace 嵌套函数为输入字符串中的每个非重叠匹配调用。

关于python - 更改字符串的时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22106969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com