技术需求:将用户输入日期转换为时间戳及MySQL Timestamp格式(YYYY-MM-DD)
刚好碰到过类似的需求,用Python来实现这两个功能非常顺手,我给你拆解一下,完全覆盖你提到的「日 月 年」格式、缺年以及带前导零的场景:
功能1:将日期转换为时间戳
我们可以用Python内置的datetime模块来搞定,它能轻松解析各种常见的日期变体,缺年的情况还能自动补全(默认补当前年份,你也可以根据需求调整)。直接上代码:
from datetime import datetime import time def date_to_timestamp(date_str): # 定义支持的「日 月 年」格式列表,可根据实际需求扩展 supported_formats = [ "%d %B %Y", # 完整月份名+年,比如 "12 February 2017" "%d %b %Y", # 月份缩写+年,比如 "12 Feb 2017" "%d %m %Y", # 数字月份+年,比如 "05 04 2023" "%d %B", # 完整月份名(缺年),比如 "05 April" "%d %b", # 月份缩写(缺年),比如 "05 Apr" "%d %m" # 数字月份(缺年),比如 "5 4" 或 "05 04" ] parsed_date = None for fmt in supported_formats: try: parsed_date = datetime.strptime(date_str, fmt) break except ValueError: continue if not parsed_date: raise ValueError(f"无法识别的日期格式: {date_str}") # 处理缺年场景:strptime缺年时默认年份为1900,这里替换为当前年份 if parsed_date.year == 1900: parsed_date = parsed_date.replace(year=datetime.now().year) # 转换为秒级时间戳 return int(time.mktime(parsed_date.timetuple()))
测试示例:
- 输入
"12 February 2017"→ 返回对应时间戳(比如1486857600,取决于具体时区) - 输入
"5 4"→ 解析为当年4月5日并返回对应时间戳 - 输入
"05 Apr"→ 解析为当年4月5日并返回对应时间戳
功能2:将日期解析为MySQL Timestamp格式(YYYY-MM-DD)
这个功能可以复用上面的日期解析逻辑,拿到datetime对象后用strftime直接输出目标格式就行:
from datetime import datetime def date_to_mysql_format(date_str): supported_formats = [ "%d %B %Y", "%d %b %Y", "%d %m %Y", "%d %B", "%d %b", "%d %m" ] parsed_date = None for fmt in supported_formats: try: parsed_date = datetime.strptime(date_str, fmt) break except ValueError: continue if not parsed_date: raise ValueError(f"无法识别的日期格式: {date_str}") # 缺年补当前年份 if parsed_date.year == 1900: parsed_date = parsed_date.replace(year=datetime.now().year) # 输出MySQL要求的YYYY-MM-DD格式 return parsed_date.strftime("%Y-%m-%d")
测试示例:
- 输入
"12 Feb 2017"→ 返回"2017-02-12" - 输入
"05 April"→ 返回"2024-04-05"(假设当前年份为2024) - 输入
"5 04"→ 返回"2024-04-05"
额外说明:
如果你的用户群体有其他特定的日期格式,只需要往supported_formats列表里添加对应的格式字符串就行;如果缺年场景不想用当前年份,也可以改成固定年份(比如2000)或者让函数接收一个可选的年份参数。
内容的提问来源于stack exchange,提问作者Ghaiss
相关产品推荐
相关产品推荐

