我正在尝试运行此代码
def main():
month_name = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
]
while True:
try:
date = dated(input("Date: "))
month, day, year = date
if int(day) <= 31:
if 1<= int(month) <= 12:
month = month.zfill(2)
print(f"{year}-{month}-{day}")
break
else:
if int(day) <= 31:
for i in range(len(month_name)):
if month_name[i] == month:
month = i+1
month = month.zfill(2)
print(f"{year}-{month}-{day}")
break
else:
return ValueError
except ValueError:
continue
def dated(s):
if "/" in s:
s = s.split("/")
if len(s[1]) == 1:
s[1] = s[1].zfill(2)
return s
else:
return s
else:
s = s.split(" ")
s[1] = s[1].replace(",","")
if len(s[1])== 1:
s[1] = s[1].zfill(2)
return s
else:
return s
if __name__ == "__main__":
main()
此代码的目的是,如果用户以 mmddyyyy 格式输入日期,特别是 10/08/1991 或 1991 年 10 月 8 日,它将以 yyyymmdd 格式显示日期,如 1991-10-08。 在执行日期格式 10/08/1991 的此代码时,如果输入在范围内,则它可以工作,否则循环也会中断,但如果输入采用第二种格式 1991 年 10 月 8 日,则代码无法尝试调试我发现为
while True:
try:
date = dated(input("Date: "))
month, day, year = date
if int(day) <= 31:
if 1<= int(month) <= 12:
month = month.zfill(2)
print(f"{year}-{month}-{day}")
break
代码运行良好,但在那之后
else:
if int(day) <= 31:
for i in range(len(month_name)):
if month_name[i] == month:
month = i+1
month = month.zfill(2)
print(f"{year}-{month}-{day}")
break
else:
return ValueError
代码不起作用。 如果我输入 1991 年 10 月 10 日,代码将直接跳转到
except ValueError:
continue
我输入 15/10/1991 代码崩溃了。 问题仅出现在主函数的 if else 部分,过时的函数工作得很好。
这是使用内置
datetime
模块实现相同目标的更简洁的方法。
from datetime import datetime
def convert_date_to_yyyymmdd(date_str):
try:
# Try to parse the date in mm/dd/yyyy format
date_obj = datetime.strptime(date_str, '%m/%d/%Y')
except ValueError:
try:
# Try to parse the date in Month dd, yyyy format
date_obj = datetime.strptime(date_str, '%B %d, %Y')
except ValueError:
# If both formats fail, raise an error
raise ValueError("The date format is not recognized. Please use mm/dd/yyyy or Month dd, yyyy format.")
# Convert the datetime object to the desired string format
return date_obj.strftime('%Y-%m-%d')
# Example usage:
date1 = "10/08/1991"
date2 = "October 8, 1991"
print(convert_date_to_yyyymmdd(date1)) # Output: 1991-10-08
print(convert_date_to_yyyymmdd(date2)) # Output: 1991-10-08
返回:
1991-10-08
1991-10-08
请注意,
datetime
模块还有许多其他有用的功能,这将使您免于重新发明轮子。