日期问题

来源:互联网 发布:淘宝u站管理中心 编辑:程序博客网 时间:2024/05/16 09:05

小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在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

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

 



/*

 *思路:先排列所有可能的情况,再筛选出符合的情况 。
 */
public class Main{
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
while(in.hasNext())
{
String str=in.next();
String[] a=str.split("/");//将输入的截取为三个String串
String[] s=new String[3];//S[]数组用于存储所有的可能的情况,无非就AA-BB-CC,CC-AA-BB,CC-BB-AA
int b=Integer.parseInt(a[0]);//即AA的整数形式
int d=Integer.parseInt(a[2]);//BB的整数形式
if(b>60)
s[0]="19"+a[0]+a[1]+a[2];
else
s[0]="20"+a[0]+a[1]+a[2];
if(d>60)
{
s[1]="19"+a[2]+a[1]+a[0];
s[2]="19"+a[2]+a[0]+a[1];
}
else
{
s[1]="20"+a[2]+a[1]+a[0];
s[2]="20"+a[2]+a[0]+a[1];
}
int[]t =new int[3];//将s[]转化为int[],方便用于排序
for(int i=0;i<3;i++)
t[i]=Integer.parseInt(s[i]);
Arrays.sort(t);


int k=0;
for(int i=0;i<t.length;i++)
{
if(check(t[i]))//检查符不符合实际条件,符合则重新放入t[]数组中
{
t[k++]=t[i];
}
}
for(int i=0;i<k;i++)
{
str=String.valueOf(t[i]);
System.out.println(str.substring(0,4)+"-"+str.substring(4,6)+"-"+
str.substring(6,str.length()));
}
}
}


private static boolean check(int num) {
// TODO Auto-generated method stub
int[] a= {31,28,31,30,31,30,31,31,30,31,30,31};
int year=num/10000;
int month=num/100%100;
int day=num%100;
if(month>12 || day>31)
return false;
if(isLeapYear(year) && month==2 && day>29)
return false;
if(day>a[month-1])
return false;
return true;

}


private static boolean isLeapYear(int y) {
// TODO Auto-generated method stub
if((y%4==0 && y%100!=0) ||y%400==0)
return true;
return false;
}
}