曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。 还有人称今后的某个世纪末的12月31日,如果是星期一则会… 有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!! 于是,“谣言制造商”又修改为星期日… 1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)? 请回答该年份(只写这个4位整数,不要写12月31等多余信息)
Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
成员方法: > public static Calendar getlnstance() public int get(int field) public void add(int field,int amount):根据给定的日历字段和对应的时间,来对当前的日历进行操作。 public final void set(int year,int month,int date):设置当前日历的年月日
重点:
实例:Calendar的getInstance方法返回一个Calendar对象,该对象的日历字段已与当前的日期和时间初始化:
Calendar rightNow = Calendar.getInstance(); public static Calendar getInstance() { return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT)); }
日历字段可以用三种方法改变:set() 、 add() 、poll()
Year:对于 get和 set指示年场数。
Mouth:January 为0,所以 [ 0,11 ]
DAY_OF_MONTH:对于 get和 set显示该月的一天。月的第一天有价值1。
DAY_OF_WEEK: SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,和 SATURDAY。分别对应:1,2,3,4,5,6,7
HOUR:12小时时钟(0 - 11)。中午和午夜的代表0,而不是12
public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); for (int year = 1999;; year += 100) { calendar.set(Calendar.YEAR, year);// 要找year calendar.set(Calendar.MONTH, 11);// 12个月,第一个月从0开始因为我们要找的是12月 calendar.set(Calendar.DAY_OF_MONTH, 31);// 月份第一天为1,我们要找的是31号 if (calendar.get(Calendar.DAY_OF_WEEK) == 1) {// 如果该年的12月31日是星期天(星期天为1) System.out.println(year); break; } }答案:2299
补充题:
写法一:
public class MyYear { public static void main(String[] args) throws ParseException { // 键盘录入你的出生的年月日 Scanner sc = new Scanner(System.in); System.out.println("请输入你的出生年月日:"); String line = sc.nextLine(); // 把该字符串转换为一个日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date d = sdf.parse(line); // 通过该日期得到一个毫秒值 long myTime = d.getTime(); // 获取当前时间的毫秒值 long nowTime = System.currentTimeMillis(); // 得到一个差值 long time = nowTime - myTime; // 把差值转换为年 double day = time / 1000 / 60 / 60 / 24; System.out.println("你来到这个世界:" + day + "天"); } }控制台输入的时候注意是:yyyy-mm-dd的形式,不然会出错!
写法二:
我自己写的方法: 避坑避雷!!!默念三遍:month是从0开始的!month是从0开始的!month是从0开始的!
public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); // 键盘录入你的出生年月日 Scanner input = new Scanner(System.in); System.out.println("请输入你的出生年月日:"); int year = input.nextInt(); int month = input.nextInt(); int day = input.nextInt(); // 得到一个毫秒值 calendar.set(year, month - 1, day); Date date = calendar.getTime(); long myTime = date.getTime(); long nowTime = System.currentTimeMillis(); long time = nowTime - myTime; double days = time / 1000 / 60 / 60 / 24; System.out.println("你来到这个世界:" + (long) days + "天"); }此外,还有一个坑,我们如果用第一种方法写,其中的
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
一定要这样写,不能写成yyyy-mm-d,数据会错的,原因是:每个字母,就算是同一个字母的大小写,都有对应的含义。不能随便写的。
end.