小明正在整理一批历史文献。这些历史文献中出现了很多日期。
小明知道这些日期都在 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
————————————————
考察点:全排列+check+TreeSet自动去重排序
好久没用TreeSet,差点都忘了这个集合~~~
package pastExamPaper;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
/*
日期问题
收获:利用TreeSet给字符串自动排序
*/
public class Demo89 {
private static int[] nums;
private static int[] ans;
private static TreeSet<Date> treeSet;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
char[] chars = s.toCharArray();
int a = (chars[0]-'0')*10+(chars[1]-'0');
int b = (chars[3]-'0')*10+(chars[4]-'0');
int c = (chars[6]-'0')*10+(chars[7]-'0');
nums = new int[3];
treeSet = new TreeSet<>();
nums[0] = a;
nums[1] = b;
nums[2] = c;
f(nums,0);
Calendar calendar = Calendar.getInstance();
for (Date item: treeSet ){
// calendar.set(Calendar.YEAR,Integer.parseInt(item.substring(0,4)));
// calendar.set(Calendar.MONTH,Integer.parseInt(item.substring(4,6))-1);
// calendar.set(Calendar.DAY_OF_MONTH,Integer.parseInt(item.substring(6)));
// Date date = calendar.getTime();
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
// System.out.println(simpleDateFormat.format(date));
System.out.println(item);
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(item));
}
}
private static void f(int[] nums, int k) {
if ( k == nums.length ){
if (check(nums)){
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR,ans[0]);
c.set(Calendar.MONTH,ans[1]-1);
c.set(Calendar.DAY_OF_MONTH,ans[2]);
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = c.getTime();
// System.out.println(simpleDateFormat.format(date));
// String ss = ans[0]+""+ans[1]+""+ans[2];
treeSet.add(date);
}
return;
}
for ( int i = k; i < nums.length; i++ ){
int t = nums[i];
nums[i] = nums[k];
nums[k] = t;
f(nums,k+1);
t = nums[i];
nums[i] = nums[k];
nums[k] = t;
}
}
private static boolean check(int[] nums) {
boolean flag = false;
ans = new int[3];
if (nums[0] > 60 && nums[1] <= 12 && nums[2] <= 31 ){
ans[0] = nums[0]+1900;
ans[1] = nums[1];
ans[2] = nums[2];
flag = true;
}else if (nums[0] < 59 && nums[1] <= 12 && nums[2] <= 31){
ans[0] = nums[0]+2000;
ans[1] = nums[1];
ans[2] = nums[2];
flag = true;
}
return flag;
}
}