public static void getDateByOffset1(String strDate, int offset) {
int year = Integer.parseInt(strDate.substring(0, 4));
int month = Integer.parseInt(strDate.substring(4, 6));
int day = Integer.parseInt(strDate.substring(6, 8));
int hour = Integer.parseInt(strDate.substring(8, 10));
int min = Integer.parseInt(strDate.substring(10, 12));
int sec = Integer.parseInt(strDate.substring(12, 14));
GregorianCalendar gc = new GregorianCalendar(year, month - 1, day, hour, min, sec);
gc.add(Calendar.DAY_OF_YEAR, offset);
Date date = gc.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
System.out.println("date1 = " + date);
System.out.println("date1 = " + sdf.format(date));
} public static void getDateByOffset2(String strDate, int offset) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
Date date = null;
try {
date = sdf.parse(strDate);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long dateTime = date.getTime() + (long) offset * (24 * 60 * 60 * 1000);
date = new Date(dateTime);
System.out.println("date2 = " + date);
System.out.println("date2 = " + sdf.format(date));
}
CalendarSample.getDateByOffset1("20090101010101", 10000 * 365);
CalendarSample.getDateByOffset2("20090101010101", 10000 * 365);输出:
date1 = Mon May 13 01:01:01 CST 12002
date1 = 120020513010101
date2 = Mon May 13 01:01:01 CST 12002
date2 = 120020513010101①如上,这两种做法的区别主要在哪?
②是说Gregorian历法没有规定闰秒(例如去年最后一秒)么~?还是规定了,但是GregorianCalendar没有实现?

解决方案 »

  1.   

    1,感觉没什么区别,建议采用第二种方式,另外,建议使用 HH 的 24 小时制格式,不建议使用 hh 的 12 小时制格式。
    2,闰秒是授时技术定义的,是为了在天文学的意义上进行时间校正,具体是在哪一年什么时候插入闰秒一般由授时部门决定的。
      

  2.   

    1.我觉得第一种好,第一种的内封闭性好,写出来的代码也很优美。你看不到类似于第二种的,(long) offset * (24 * 60 * 60 * 1000),关于详细算法本来就应该封装起来,用轮子的人 不应该关注这个。除非你有特殊需求,才会直接用用Date去直接加上。
    2.没这块知识,不晓得