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);给个答案。解释下结果。
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);
-1325491552
353
返回的是该对象的哈希码,
parse(String text, ParsePosition pos)里面ParsePosition里hashCode()返回此 ParsePosition 的哈希码。
所有电脑执行结果应该是一样的-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负数运算结果,
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);
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了
学习 java 还需要上至天文啊。。压力很大。。并且,作为一个无证的java程序员,压力更大阿
从上图中我们可以看到—— 在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
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秒。
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秒
-------------------------------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) 《七重天》 奥斯卡最佳男配角奖——未设此项奖 奥斯卡最佳女配角奖——未设此项奖
String str4 = "1927-12-31 23:54:08";
只有这个时间段是353,其他时间段都是正常的,不存在什么错误的说法。。
7L的解释是正确的。。
http://blog.sina.com.cn/s/blog_538dd0670100tat1.html