hihocoder 闰秒

13 篇文章 0 订阅

 闰秒

时间限制: 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

如果用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);
	}
	
}






    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值