日期问题
题目描述
小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在 1960
年 1
月 1
日至 2059
年 12
月 31
日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。
更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。
比如 02/03/04
,可能是 2002
年 03
月 04
日、2004
年 02
月 03
日或 2004
年 03
月 02
日。
给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?
输入描述
一个日期,格式是 “AA/BB/CC
” (0≤A,B,C≤9
)。
输出描述
输出若干个不相同的日期,每个日期一行,格式是 “yyyy−MM−dd
”。多个日期按从早到晚排列。
输入输出样例
示例
输入
02/03/04
输出
2002-03-04
2004-02-03
2004-03-02
运行限制
最大运行时间:1s
最大运行内存: 256M
记录题解
看题解区大佬代码写的注释
package com.xiang.lanqiao;
import java.text.SimpleDateFormat;
import java.util.Scanner;
import java.util.TreeSet;
/**
* 看题解区大佬代码写的注释
* @author snape
* @create 2022-04-07 15:55
*/
public class DateOfIssue {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String temp=scanner.next();
// String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。
String date[]=temp.split("/");
String y=date[0],m=date[1],d=date[2],
yMd=(Integer.parseInt(y)<60 ? "20"+y : "19"+y) + "-" + m + "-" + d,//年/月/日
mDy=(Integer.parseInt(d)<60 ? "20"+d : "19"+d) + "-" + y + "-" + m,//月/日/年
dMy=(Integer.parseInt(d)<60 ? "20"+d : "19"+d) + "-" + m + "-" + y;//日/月/年
//判断日期格式,正确则存入set去重
TreeSet<String> set = new TreeSet<String>();
if(isdate(yMd)) set.add(yMd);
if(isdate(mDy)) set.add(mDy);
if(isdate(dMy)) set.add(dMy);
//遍历打印
for (Object object : set) {
System.out.println(object);
}
}
// 判断日期格式是否正确
static boolean isdate(String date){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
//这种情况下java不会把你输入的日期进行计算,比如55个月那么就是不合法的日期了,直接异常
format.setLenient(false);
format.parse(date);
}catch(Exception e){
return false;
}
return true;
}
}