特殊日期格式转换技术咨询:117/12/31转2017、89/12/31转1989
刚好之前处理过类似的日期格式转换需求,核心逻辑其实很清晰:先拆分出年份部分,再根据规则判断补19还是20前缀,下面给你几种常用工具的具体实现方法,你可以按需选用:
1. Python 实现
用Python处理的话,我们可以写一个简单的函数来封装转换逻辑,步骤很直观:
- 拆分日期字符串,提取年份、月份、日期
- 根据年份数值判断补全世纪前缀:三位年份(如117)取后两位加2000,两位年份(如89)直接加1900
- 重新拼接成标准日期格式
def convert_custom_date(date_str): # 拆分日期的年、月、日部分 year_segment, month, day = date_str.split('/') year_num = int(year_segment) # 按规则补全年份 if year_num >= 100: full_year = 2000 + (year_num % 100) else: full_year = 1900 + year_num # 拼接回完整日期字符串 return f"{full_year}/{month}/{day}" # 测试示例 print(convert_custom_date("117/12/31")) # 输出:2017/12/31 print(convert_custom_date("89/12/31")) # 输出:1989/12/31
2. Excel 公式实现
如果是在Excel中批量处理,假设原始日期在A1单元格,可以用两种方式实现:
方式一:直接拼接字符串
适合只需要文本格式日期的场景:
=IF(LEFT(A1,FIND("/",A1)-1)+0>=100, "20"&RIGHT(LEFT(A1,FIND("/",A1)-1),2), "19"&LEFT(A1,FIND("/",A1)-1))&MID(A1,FIND("/",A1),LEN(A1)-FIND("/",A1)+1)
方式二:转换为Excel日期格式
适合后续需要进行日期计算的场景,会自动转成可计算的日期类型:
=TEXT(DATE(IF(LEFT(A1,FIND("/",A1)-1)+0>=100,2000+MOD(LEFT(A1,FIND("/",A1)-1)+0,100),1900+LEFT(A1,FIND("/",A1)-1)+0),MID(A1,FIND("/",A1)+1,FIND("/",A1,FIND("/",A1)+1)-FIND("/",A1)-1),RIGHT(A1,LEN(A1)-FIND("/",A1,FIND("/",A1)+1))),"yyyy/mm/dd")
3. SQL 实现(以MySQL为例)
如果是数据库中的日期字符串需要转换,可以用SQL的字符串函数来处理:
SELECT CONCAT( CASE WHEN CAST(SUBSTRING_INDEX(old_date, '/', 1) AS UNSIGNED) >= 100 THEN 2000 + MOD(CAST(SUBSTRING_INDEX(old_date, '/', 1) AS UNSIGNED), 100) ELSE 1900 + CAST(SUBSTRING_INDEX(old_date, '/', 1) AS UNSIGNED) END, SUBSTRING(old_date, LOCATE('/', old_date)) ) AS converted_date FROM your_table;
注意:如果你的需求里有特殊情况(比如00/12/31需要转换为2000/12/31而不是1900/12/31),可以调整判断条件,比如在else分支里加一个判断:ELSE IF year_num = 0 THEN 2000 ELSE 1900 + year_num END IF。
内容的提问来源于stack exchange,提问作者dennis




