题目1 : 闰秒
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
计算机系统中使用的UTC时间基于原子钟,这种计时方式同“地球自转一周是24小时”的计时方式有微小的偏差。为了弥补这种偏差,我们偶尔需要增加一个“闰秒”。
最近的一次闰秒增加发生在UTC时间2016年的最后一天。我们在2016年12月31日23时59分59秒和2017年1月1日0时0分0秒之间增加了这样一秒:2016年12月31日23时59分60秒,记作2016-12-31 23:59:60。
目前一共增加了27次闰秒,具体添加的时间见下表:
给出两个时间,请你判断在考虑闰秒的情况下,这两个时间间隔多少秒。
输入
两个时间各占一行,格式是yyyy-MM-dd HH:mm:ss,范围在1970-01-01 00:00:00至2017-03-12 23:59:59之间。保证第一个时间不晚于第二个时间。
输出
两个时间间隔多少秒。
样例输入
2016-12-31 23:59:59 2017-01-01 00:00:00
样例输出
2
使用dateformat
package Daily;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class Main_235 {
int six [] = {1972,1981,1982,1983,1985,1992,1993,1994,1997,2012,2015};
int twelve[] = {1972,1973,1974,1976,1977,1978,1979,1987,1989,1990,
1995,1998,2005, 2008,2016};
Main_235() {
Scanner cin = new Scanner(System.in);
String from = cin.nextLine().trim(), to = cin.nextLine().trim();
if (from.equals(to)) {
System.out.println(0);
return;
}
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<String> dates = new LinkedList<>();
for (int i : six) {
dates.add(String.format("%d-06-30 23:59:60", i));
}
for (int i : twelve) {
dates.add(String.format("%d-12-31 23:59:60", i));
}
try{
long ans =0;
Date beg = format.parse(from) , end = format.parse(to);
for(String i : dates){
if(i.equals(from)){
ans ++;
beg.setTime(beg.getTime());
}else if(i.equals(to)){
end.setTime(end.getTime());
}
}
ans += (end.getTime() - beg.getTime()) / 1000;
for(String i : dates){
if(i.compareTo(from) > 0 && i.compareTo(to) < 0){
ans ++;
}
}
System.out.println(ans);
}catch (Exception e){
e.printStackTrace();
}
}
public static void main(String []args){
new Main_235();
}
}