当前位置:编程学习 > JAVA >>

日期格式化的时候遇到一个问题

代码如下:
public static void main(String[] args) throws ParseException {
SimpleDateFormat fm1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat fm2 = new SimpleDateFormat("yyyy-MM-dd");
Date d1 = new Date();
System.out.println(fm1.format(d1));

Date d2 = fm2.parse("1986-05-04");
System.out.println(fm1.format(d2));

Date d3 = fm2.parse("1986-05-01");
System.out.println(fm1.format(d3));
}
运行结果:
2011-11-14 21:43:54
1986-05-04 01:00:00
1986-05-01 00:00:00
问题:第2个日期打印出来为什么是 01:00:00 ?? --------------------编程问答-------------------- 你要它打印什么? --------------------编程问答-------------------- 怪了,我这里也是这种情况 --------------------编程问答-------------------- 求解?也不知 顶起来~ --------------------编程问答-------------------- 这种情况就是这个类没写好。。。你得查看源代码才知道情况= = --------------------编程问答-------------------- 1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时整(北京夏令时)。除1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。夏令时实施期间,将时间向后调快一小时。1992年4月5日后不再实行。  --------------------编程问答--------------------
引用 5 楼 huntor 的回复:
1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时整(北京夏令时)。除1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。夏令时实施期间,将时间向后调快一小时。1992年4月5日后不再实行。

写程序得看百科全书啊,牛! --------------------编程问答--------------------
引用 5 楼 huntor 的回复:
1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时整(北京夏令时)。除1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。夏令时实施期间,将时间向后调快一小时。1992年4月5日后不再实行。

真牛 顶起来 --------------------编程问答-------------------- 诡异,就1986-05-04有时间- -! --------------------编程问答-------------------- 百科啊- -!!!纠结! --------------------编程问答-------------------- --------------------编程问答--------------------
引用 5 楼 huntor 的回复:
1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时整(北京夏令时)。除1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。夏令时实施期间,将时间向后调快一小时。1992年4月5日后不再实行。

。。。。。。。。。。。。。。。。。。。真心佩服!!! --------------------编程问答--------------------
引用 5 楼 huntor 的回复:
1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时整(北京夏令时)。除1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。夏令时实施期间,将时间向后调快一小时。1992年4月5日后不再实行。
敬仰 --------------------编程问答--------------------
引用 5 楼 huntor 的回复:
1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时整(北京夏令时)。除1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。夏令时实施期间,将时间向后调快一小时。1992年4月5日后不再实行。

牛 --------------------编程问答--------------------
引用 5 楼 huntor 的回复:
1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时整(北京夏令时)。除1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。夏令时实施期间,将时间向后调快一小时。1992年4月5日后不再实行。
  佩服 --------------------编程问答--------------------

Date d2 = fm2.parse("1986-05-04");
System.out.println(fm2.format(d2));

Date d3 = fm2.parse("1986-05-01");
System.out.println(fm2.format(d3));
你想匹配的是"yyyy-MM-dd"格式输出? --------------------编程问答--------------------
引用 5 楼 huntor 的回复:
1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时整(北京夏令时)。除1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。夏令时实施期间,将时间向后调快一小时。1992年4月5日后不再实行。


五体头地了 --------------------编程问答-------------------- 五楼 让我佩服了 --------------------编程问答--------------------
引用 5 楼 huntor 的回复:
1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时整(北京夏令时)。除1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。夏令时实施期间,将时间向后调快一小时。1992年4月5日后不再实行。

膜拜 --------------------编程问答-------------------- 膜拜5楼! --------------------编程问答-------------------- 写程序要什么都懂才行 --------------------编程问答--------------------
引用 5 楼 huntor 的回复:
1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时整(北京夏令时)。除1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。夏令时实施期间,将时间向后调快一小时。1992年4月5日后不再实行。

学习了 真牛 --------------------编程问答-------------------- 因为你用的是SimpleDateFormat fm1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
这个是带时分秒的,你看清楚了 --------------------编程问答--------------------
引用 5 楼 huntor 的回复:
1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时整(北京夏令时)。除1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。夏令时实施期间,将时间向后调快一小时。1992年4月5日后不再实行。


膜拜。 求高手顺便讲解这里的源代码的实现方式。 再次感谢。 --------------------编程问答-------------------- 历史遗留问题,坑了我们这一代码农。不过还是真心膜拜5楼大神 --------------------编程问答-------------------- 再次膜拜5楼。

这里经过查看源代码:

在DateFormat里进行SimpleDateFormat转换日期对象时,会取Locale.getDefault()也就是取当前的时区。

然后在TimeZone中的useDaylightTime()方法判断此时区是否使用夏令时。

inDaylightTime(Date date) 方法判断给定的时间是否在夏令时中。

getOffset(int era, int year, int month, int day, int dayOfWeek, int milliseconds)方法判断夏令时偏移量。

setRawOffset(int offsetMillis) 把基准时区偏移量设置到 GMT。



实行夏令时的时候我还小学都没上。完全没概念。一直以为只有国外才有乱七八糟的夏令时。
所以忽略了JDK里的日期格式化时,还有个参数是设置本地时区。原来用处这么大。 --------------------编程问答-------------------- 你确信你了解时间吗?

引用
从上图中我们可以看到—— 在1927年12月31日23:59:59时,往后面的一秒应该是1928年1月1日 0:0:0,但是这个时间被往后调整了5分52秒,而成了,1927年12月31日的,23:54:08,于是,完成了352秒的穿越。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,