SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     String str3 = "1927-12-31 23:54:07";
     String str4 = "1927-12-31 23:54:08";
     Date sDt3 = sf.parse(str3);
     Date sDt4 = sf.parse(str4);
     long ld3 = sDt3.getTime() /1000;
     long ld4 = sDt4.getTime() /1000;
     System.out.println(ld3);
     System.out.println(ld4);
     System.out.println(ld4-ld3);给个答案。解释下结果。

解决方案 »

  1.   


    String str3 = "1927-12-31 23:54:07";
         String str4 = "1927-12-31 23:54:08";
    //将str3 str4转换成日期    
     Date sDt3 = sf.parse(str3);
         Date sDt4 = sf.parse(str4);
    //得到他们的时间缀秒数
         long ld3 = sDt3.getTime() /1000;
         long ld4 = sDt4.getTime() /1000;
         System.out.println(ld3);
         System.out.println(ld4);
    //显示他们之间的时间差(单位秒)
         System.out.println(ld4-ld3);
      

  2.   

    是不是超出long的表示范围了啊1楼的分析师正确的.你把ld3打印出来看看是多少啊。
      

  3.   

    我运行的结果是:-1325491905
    -1325491552
    353
    返回的是该对象的哈希码,
    parse(String text, ParsePosition pos)里面ParsePosition里hashCode()返回此 ParsePosition 的哈希码。
      

  4.   

    1928年1月1日0:00:00 之前用的是叫个啥 地方平时(LMT local mean time), 然后1928年1月1日0:00:00改成了 北京时间,这个 北京时间 要比 LMT 慢5分52秒, 往回拨5分52秒,也就是说23:54:08到23:59:59这段时间出现了两次,显然getTime取的是后面的这个23:54:08。http://stackoverflow.com/questions/6841333/why-is-subtracting-these-two-times-in-1927-giving-a-strange-result
      

  5.   

    我记得前几天有人问过,对于1970年之前的时间,计算出来会有偏差,有人说是jdk的问题,你可以找一下前几天的帖子
      

  6.   

    给你一个可信的解释
    所有电脑执行结果应该是一样的-1325491905
    -1325491552
    353
    结果的解释是,第一行-1325491905 是对应long ld3 = sDt3.getTime() /1000;
    sDt3.getTime()返回的是对应"1927-12-31 23:54:07"这个时间与计算机协定的1970 1-1 00:00:00的毫秒的间隔数,如果在1970 1-1 00:00:00之前返回的是负的Long值,如果在之后返回正值,你的时间是1927年,所以值是-1325491905000然后除以1000,就输出了-1325491905
    第二行的代码理解一样
    第三行就容易解释了,实际上传的353就是上面两行的long负数运算结果,
      

  7.   

    大胡子的解释是对的
                    SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
    sf.setTimeZone(TimeZone.getTimeZone("GMT"));//使用格林威治时间即可得到正确结果,时间都是以这个为基础来计算的
    String str3 = "1927-12-31 23:54:07";
    String str4 = "1927-12-31 23:54:08";
    Date sDt3 = sf.parse(str3);
    Date sDt4 = sf.parse(str4);
    long ld3 = sDt3.getTime() / 1000;
    long ld4 = sDt4.getTime() / 1000;
    System.out.println(ld3);
    System.out.println(ld4);
    System.out.println(ld4 - ld3);
      

  8.   


     String str3 = "1927-12-1 23:54:07";
     String str4 = "1927-12-1 23:54:08";
    这样的话,他们相差是1
     String str3 = "1927-12-31 23:54:07";
     String str4 = "1927-12-31 23:54:08";
    这样的话 他们相差不是1了
      

  9.   


    学习 java 还需要上至天文啊。。压力很大。。并且,作为一个无证的java程序员,压力更大阿
      

  10.   

    好像前几天有人发过java bug的问题
      

  11.   

    民國17年(1928年),國民政府統一中國,原中央觀象台的業務由南京政府中央研究院的天文研究所和氣象研究所分別接收。天文研究所編寫的曆書基本上沿襲中央觀象台的做法,仍將全國劃分為5個標準時區,只是在有關交氣、合朔、太陽出沒時刻等處,不再使用北平的地方平時,而改以南京所在的標準時區的區時即東經120°標準時替代。统一使用GTM来处理再转回相应时区就没问题了
      

  12.   


    从上图中我们可以看到—— 在1927年12月31日23:59:59时,往后面的一秒应该是1928年1月1日 0:0:0,但是这个时间被往后调整了5分52秒,而成了,1927年12月31日的,23:54:08,于是,完成了352秒的穿越。于是我们的Java程序出了这样的一个问题,这真是一个奇迹。为什么会有这个调整呢?我居然Google不到,不过,我在这个timeanddate.com上查看了一下北京的时间,发现北京的时间只到1970年,于是我猜想,中国近代历史乱七八糟的政权交替可能是这个原因。于是我看 了一下北京和上海物理时差,果然,北京上海的时差在5分50秒左右。因此,我觉得这个时间的变化应该是从上海时间变成了北京时间。至于你信不信,反正我是信了。从这个事,我得到下面的一些启示:Java在的时区实现相当的强大啊。这种细节都能考虑到。
    本地时间的完全就是一锅,应该尽量不用。
    如果你要开发和时区有关系的程序,你的系统里一定要使用GMT标准时间,仅在显示的时候才转成本地时间。
    各位无证程序员们,看到这个例子,你们是不是感到编程的压力了?呵呵。原文出自:http://coolshell.cn/articles/5075.html
      

  13.   

    package javase201108;import java.util.Date;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;public class Test01 { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String str3 = "1927-12-31 23:54:07";
    String str4 = "1927-12-31 23:54:08";
    Date sDt3 = null;
    try {
    sDt3 = (Date) sf.parse(str3);
    } catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    Date sDt4 = null;
    try {
    sDt4 = (Date) sf.parse(str4);
    } catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    long ld3 = sDt3.getTime() / (long)1000;
    System.out.println("ld3 is: " + ld3);
    long ld4 = sDt4.getTime() / (long)1000;
    System.out.println("ld4 is: " + ld4);
    System.out.println("ld4 - ld3 is: " + (ld4 - ld3));
    System.out.printf("%x", ld3);
    System.out.println();
    System.out.printf("%x", ld4);
    System.out.println();
    System.out.println(sDt3.getTime() / 1000 - sDt4.getTime() / 1000);
    }}
    getTime()“返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。”
    你搞的那个1927年,负值很正常,值错误很正常。不信你搞个1970年后的str试一试,绝对是1秒。
      

  14.   

    其实关于这个问题,也只有在:String str3 = "1927-12-31 23:54:07";
         String str4 = "1927-12-31 23:54:08";这一秒才会出现这个问题。为什么列?上面已经说了原因了。  由于两个时间相差5分52秒,1927-12-31 23:54:08 实际上就是1928年1月1日0时0分0秒。   你在调用getTime()的时候,他已经将他转换成1928年来计算了。 所以和前者相差了5分53秒,也就是353秒
      

  15.   

    1928年 那是一个神奇的一年
    -------------------------------928年-1月
      1月9日,蒋介石正式恢复北伐军总司令的职务。   1月10日,里昂·托洛斯基逃离(有人说里昂·托洛斯基是被逐出的)苏联  民国十七年甘肃孙中山像一元银币
    。   1月,方志敏、邵式平、黄道等在江西弋阳、横峰领导武装起义,建立了工农革命武装,实行土地革命,开展游击战争,并逐步创建了赣东北革命根据地。   1月下旬,朱德、陈毅等率领南昌起义保留下来的部分队伍,由广东北江进入湘南地区,在中共地方组织的配合下,举行宜章、郴州(今郴县)、耒阳、永兴、资兴等县的年关起义,扩大了革命武装。   1月,周逸群、贺龙到洪湖、湘鄂边地区发动群众,开展武装斗争。3月,工农革命军发动起义,攻占了桑植县城。4月,敌人向桑植地区进攻,工农革命军遭到挫折。周逸群转移到洪湖地区领导群众斗争。贺龙留在桑植、鹤峰边界,坚持游击战争。随后,根据湖南省委指示,成立了工农革命军第四军,贺龙任军长。?
    编辑本段1928年-2月
        1928年圣莫里兹冬奥会奖牌
    2月11日,冬季奥林匹克运动会在瑞士圣莫里茨开幕。   2月,中共平和县委决定建立福建工农革命军第一团和暴动委员会。3月8日,平和县委负责人朱积垒等在闽南平和领导农民举行武装起义。在敌人反扑下,起义军撤出县城。后来,部分农军转入山区坚持斗争。?
    编辑本段1928年-3月
      3月10日,徐志摩主编的《新月》杂志创刊。   3月12日,美国加利福尼亚州圣法兰西斯大堤崩溃,400人丧生。
    编辑本段1928年-4月
        1928年圣莫里兹冬奥会奖牌
    4月1日,九铁沙头角支线关闭。   4月7日,蒋介石发出第二次北伐的总攻令。   4月14日,田中奏折被发现并整理。   4月28日,朱德带领的南昌起义军队与毛泽东在井冈山会师。   4月28日,国民革命军占领济南。
    编辑本段1928年-5月
      5月3日,五三惨案。   5月4日,中国工农红军第四军成立。   5月17日,台湾发生赵明河事件。   5月17日,第九届夏季奥林匹克运动会开幕。   5月23日,“米老鼠”卡通形象诞生。   5月25日,中共中央发出《中央通告第五十一号——军事工作大纲(采用广东省委扩大会议军事问题决议案内容)》。   5月28日,克莱斯勒公司与道奇公司合并。   5月,泰兴、如皋、靖江、南通等地农民在中共江苏省委和江北特委领导下,先后发动起义。起义军虽然遭到挫折,但他们依靠群众,积极开展活动,使游击队逐步恢复和发展。?
    编辑本段1928年-6月
      6月3日,张作霖下令奉军退出关外。   6月4日,震惊中外的“皇姑屯事件”爆发。奉系军阀张作霖乘坐的火车专列行至沈阳城郊皇姑屯车站的铁桥时,日本关东军高级参谋河本大作大佐指挥日本工兵引爆预埋的炸药,张重伤,抬回后气绝身亡。至此,统治民国16年的北洋军阀政府结束。   6月4日,中共中央致信朱德、毛泽东,向他们通报了全国的政治局势,特别介绍了湘、鄂、粤、赣四省进行暴动和实行武装割据的情况,并对工农革命军第四军今后的任务和工作作出指示:要以第四军的军事实力发动广大的工农群众,实行土地革命,造成割据的局面向四周发展而推进湘鄂赣粤四省暴动局面的发展。第四年“可以正式改成红军”,并要求对军队进行改造和整顿。要求在割据区域深入进行土地革命和建立苏维埃的工作。指定毛泽东、朱德等5人组成中共前敌委员会,全权领导永新、宁冈、遂川、万安、茶陵、攸县、酃县和工农革命军的工作。   6月8日,山西军阀阎锡山率军进入北京,自任为京津卫戍司令。   6月12日,斯大林在莫斯科市内的一个大楼里,接见了中国共产党的领导人。瞿秋白、周恩来、李立三、邓中夏、苏兆征等都参加了   6月18日,中国共产党第六次全国代表大会在苏联莫斯科召开。   6月18日,女性首次成功飞越大西洋。   6月20日,新疆杨增新通电归顺南京政府   6月30日,香港第一个电台诞生,台号为GOW。   6月,红四军在朱德、陈毅指挥下,于永新、宁冈两县交界的龙源口歼灭进攻之敌千余人。此后,井冈山革命根据地进入全盛时期。8月,毛泽东领导红军排除“左”倾盲动主义的干扰,保卫了井冈山革命根据地。10月,湘赣边界党的第二次代表大会通过由毛泽东起草的《政治问题和边界党的任务》决议。这个决议进一步总结井冈山斗争和各地建立红色政权的经验,论证中国红色政权存在和发展的规律,提出了“工农武装割据”的光辉思想。
    编辑本段1928年-7月
      7月7日,统治新疆17年的杨增新在参加一个宴会的时候被部下杀死 。   7月7日,南京国民政府宣告废除中外不平等条约。   7月21日 ,全国反日大会在上海召开。   7月22日,原国民革命军湖南陆军独立第五师第一团,在彭德怀、滕代远领导下,举行平江起义。   7月28日,第九届奥运会在荷兰阿姆斯特丹举行。
    编辑本段1928年-8月
      8月28日,在巴黎,凯洛格一白里安公约被签定,禁止主动性战争。   8月30日,尼赫鲁创立印度独立联盟,对抗英国统治,争取独立自由。
    编辑本段1928年-9月
      9月15日 ,弗莱明发明青霉素。
    编辑本段1928年-10月
        1928年蒋介石任国民党政府主席
    10月8日,蒋介石任南京国民政府主席。   10月10日,蒋介石就任国民政府委员会主席。   10月,闽北崇安等地农民在当地党组织领导下举行起义。起义胜利后,建立了游击队,并在崇安东北地区进行游击战争。?   10月13日,安阳殷墟开始发掘。
    编辑本段1928年-11月
      11月6日,美国总统大选,赫伯特·胡佛获胜。   11月10日,日本昭和天皇加冕。   11月18日,米老鼠在第一部有声动画片《威利号汽船》中担任主角,首次与观众见面。
    编辑本段1928年-12月
      12月29日,张学良下令奉天(今沈阳)总部上空升起中华民国国旗,并公开宣布了他支持国民政府,中国形式上统一,史称东北易帜。   12月,彭德怀、滕代远率领红五军五个大队的兵力到达井冈山与红四军会合,进一步壮大了井冈山的武装力量。同月,毛泽东总结农村革命根据地的土地革命经验,制定了井冈山《土地法》。
    编辑本段1928年-出生
      1月5日,佐勒菲卡尔·阿里·布托,巴基斯坦政治家。(1979年逝世)   1月5日,钱其琛,前 中华人民共和国外交部长。   1月24日,德斯蒙德·莫利斯,英国著名动物学家。   1月25日,谢瓦纳兹,乔治亚政治家。   2月27日,阿里埃勒·沙龙,以色列政治家。   4月6日,詹姆斯·沃森,遗传学家。   4月14日,钟逸杰,前香港布政司。   4月23日,秀兰·邓波儿,美国电影明星。   5月4日,穆巴拉克,埃及总统。   6月14日,切·格瓦拉,古巴革命家。(1967年逝世)   7月26日,斯坦利·库布里克,美国电影导演。(1999年逝世)   7月29日,李嘉诚,香港国际企业家,香港及亚洲首富,亦是世界上最富有的华人。   8月6日,安迪·沃荷,美国波普艺术的开创者。(1987年逝世)   10月1日,朱镕基,中华人民共和国第九任国务院总理、前中国人民银行行长。   10月20日,李鹏,中国政治人物。   11月18日,米老鼠,动画人物。   12月15日,弗里顿斯莱希·洪德特瓦塞尔,奥地利建筑师和艺术家。(逝世2000年)
    编辑本段1928年-逝世
      2月4日,洛伦兹,荷兰物理学家(出生1853年)   5月21日,野口英世:日本著名医学家,曾被三度提名诺贝尔医学奖   6月3日,黎元洪,中华民国第三任总统(出生1864年)   6月4日,张作霖,当时的中华民国北洋政府国家元首,北洋军阀奉系首领,在皇姑屯事件被日本关东军预埋的炸药炸死(出生1875年)   6月18日,罗尔德·亚孟森,挪威极地探险家(出生1872年)
    编辑本段1928年-诺贝尔奖
      物理:欧文·威伦斯·莱因霍尔德·里查孙   化学:夏尔-于勒-昂利·尼科尔   生理和医学:罗伯特·巴拉尼   文学:西格里德·温塞特   和平:未颁发
    编辑本段1928年-奥斯卡金像奖
      奥斯卡最佳影片奖——《翼》(Wings)   奥斯卡最佳导演奖——弗兰克·鲍才奇(Frank Borzage) 《七重天》   奥斯卡最佳男主角奖——艾米尔·詹宁斯(Emil Jannings) 《最后的命令》   奥斯卡最佳女主角奖——詹妮·盖诺(Janet Gaynor) 《七重天》   奥斯卡最佳男配角奖——未设此项奖   奥斯卡最佳女配角奖——未设此项奖
      

  16.   

            String str3 = "1927-12-31 23:54:07";
            String str4 = "1927-12-31 23:54:08";
    只有这个时间段是353,其他时间段都是正常的,不存在什么错误的说法。。
    7L的解释是正确的。。
      

  17.   

    这里是准确的原因。
    http://blog.sina.com.cn/s/blog_538dd0670100tat1.html