日期格式化的时候遇到一个问题
代码如下: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日后不再实行。 --------------------编程问答--------------------
写程序得看百科全书啊,牛! --------------------编程问答--------------------
真牛 顶起来 --------------------编程问答-------------------- 诡异,就1986-05-04有时间- -! --------------------编程问答-------------------- 百科啊- -!!!纠结! --------------------编程问答-------------------- --------------------编程问答--------------------
。。。。。。。。。。。。。。。。。。。真心佩服!!! --------------------编程问答-------------------- 敬仰 --------------------编程问答--------------------
牛 --------------------编程问答-------------------- 佩服 --------------------编程问答--------------------
你想匹配的是"yyyy-MM-dd"格式输出? --------------------编程问答--------------------
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));
五体头地了 --------------------编程问答-------------------- 五楼 让我佩服了 --------------------编程问答--------------------
膜拜 --------------------编程问答-------------------- 膜拜5楼! --------------------编程问答-------------------- 写程序要什么都懂才行 --------------------编程问答--------------------
学习了 真牛 --------------------编程问答-------------------- 因为你用的是SimpleDateFormat fm1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
这个是带时分秒的,你看清楚了 --------------------编程问答--------------------
膜拜。 求高手顺便讲解这里的源代码的实现方式。 再次感谢。 --------------------编程问答-------------------- 历史遗留问题,坑了我们这一代码农。不过还是真心膜拜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里的日期格式化时,还有个参数是设置本地时区。原来用处这么大。 --------------------编程问答-------------------- 你确信你了解时间吗?
补充:Java , Java SE