闰秒
时间限制:
10000ms
单点时限:
1000ms
内存限制:
256MB
-
2016-12-31 23:59:59 2017-01-01 00:00:00
样例输出
-
2
描述
计算机系统中使用的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之间。保证第一个时间不晚于第二个时间。
输出
两个时间间隔多少秒。
如果用c++写的话 会比较烦 直接使用java里面的date可以直接求出来 然后根据已知的加闰秒的时间 对求出来的时间进行修改 得出最终的答案
在比赛中得了90分 但是很奇怪 感觉没问题
import java.sql.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Scanner;
public class Main {
public static void main(String args[]) throws ParseException{
Scanner scanner=new Scanner(System.in);
String string1=null;
String string2=null;
String string3=null;
String string4=null;
string1=scanner.next();
string2=scanner.next();
string3=scanner.next();
string4=scanner.next();
String s1=string1+" "+string2;
String s2=string3+" "+string4;
String s[]={"1972-06-30 23:59:60","1972-12-31 23:59:60","1973-12-31 23:59:60","1974-12-31 23:59:60",
"1975-12-31 23:59:60","1976-12-31 23:59:60","1977-12-31 23:59:60","1978-12-31 23:59:60",
"1979-12-31 23:59:60","1981-06-30 23:59:60","1982-06-30 23:59:60","1983-06-30 23:59:60",
"1985-06-30 23:59:60","1987-12-31 23:59:60","1989-12-31 23:59:60","1990-12-31 23:59:60",
"1992-06-30 23:59:60","1993-06-30 23:59:60","1994-06-30 23:59:60","1995-12-31 23:59:60",
"1997-06-30 23:59:60","1998-12-31 23:59:60","2005-12-31 23:59:60","2008-12-31 23:59:60",
"2012-06-30 23:59:60","2015-06-30 23:59:60","2016-12-31 23:59:60"};
// System.out.println(string1+" "+string2);
// System.out.println(string3+" "+string4);
DateFormat dfDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date[] d=new java.util.Date[27];
for(int i=0;i<27;i++)
d[i]=dfDateFormat.parse(s[i]);
java.util.Date d1=dfDateFormat.parse(string1+" "+string2);
java.util.Date d2=dfDateFormat.parse(string3+" "+string4);
long diff=d2.getTime()-d1.getTime();
int t=(int)(diff/1000);
for(int i=0;i<27;i++){
// long diff1=d[i].getTime()-d1.getTime();
// long diff2=d[i].getTime()-d2.getTime();
// System.out.println("diff1: "+diff1+" diff2: "+diff2);
// if(diff1>=0)
// t=t+1;
// if(diff2>=1000)
// t=t-1;//答案有错 WA 这与下面的有不同的地方吗 很奇怪
if(s[i].compareTo(s1)>=0)
t++;
if(s[i].compareTo(s2)>=0)
t--;//求出正确答案
}
System.out.println(t);
}
}