7、日期问题
小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在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
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
不要使用package语句。不要使用jdk1.7及以上版本的特性。
主类的名字必须是:Main,否则按无效代码处理。
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class t07 {
static String[][] result = new String[3][3];
static int getDayC(int year, int month) {
int dayC = 0;
switch(month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
dayC=31;
break;
case 4:
case 6:
case 9:
case 11:
dayC=30;
break;
case 2:
if(year%4==0 && year%100!=0 || year%400==0) {dayC=29;break;}
else {dayC=28;break;}
}
return dayC;
}
static boolean isRight(int i) {
if(getYear(result[i][0]) > 2059 || getYear(result[i][0]) < 1960 || getYear(result[i][0]) == -1) { return false;}
if(Integer.parseInt(result[i][1]) > 12 || Integer.parseInt(result[i][1]) <= 0) {return false;}
if(Integer.parseInt(result[i][2]) > getDayC(Integer.parseInt(result[i][0]), Integer.parseInt(result[i][1])) || Integer.parseInt(result[i][2]) <= 0) {return false;}
return true;
}
static void swap(String[] max, String[] min) {
String[] temp = max;
max = min;
min = temp;
}
static int getYear(String year) {
int y = Integer.parseInt(year);
if(y<60) return (2000+y);
else if(y>=0) return (1900+y);
else return -1;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
String[] data = s.split("/");
for(int i=0; i<3; i++) {
if(i == 0 ) { result[i][0] = data[0]; result[i][1] = data[1]; result[i][2] = data[2];}
if(i == 1 ) { result[i][0] = data[2]; result[i][1] = data[0]; result[i][2] = data[1];}
if(i == 2 ) { result[i][0] = data[2]; result[i][1] = data[1]; result[i][2] = data[0];}
}
Set<String> ss = new TreeSet<String>();
for(int i=0; i<3; i++) {
if(isRight(i)) {
String temp = getYear(result[i][0])+"-"+result[i][1]+"-"+result[i][2];
ss.add(temp);
}
}
for(String sss:ss) {
System.out.println(sss);
}
}
}
学到两点:
- treeset对字符串也会排序
- 注意日期的范围不能等于小于零,需要在代码中表现出来
参考链接:
https://blog.csdn.net/weixin_41793113/article/details/87976875
这位博主写的十分清晰,代码量也很少