java中格式化“1990-04-15 00:00:00”这个字符串为Date时出现问题
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 String str = "1990-04-15 00:00:00";
 System.out.println(sdf.format(sdf.parse(str)));

运行结果为:1990-04-15 01:00:00

这里为什么格式化后的日期多了一个小时?

补充啊,这里的时间改成任意的其他时间就正常

新人没有币,还请指导的解惑啊

9个回答

我也想知道!! 神奇

你看看本地时区是哪,设置成北京时区

因为24时 日期格式是没有00点的。00点就认为是1点。晚上12点是24点。

我运行了了
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String str = "1990-04-15 01:00:00";
System.out.println(sdf.format(sdf.parse(str)));
发现结果 1990-04-15 01:00:00

运行下面的之后
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = "1998-04-15 00:00:00";
System.out.println(sdf.format(sdf.parse(str)));
结果是这个:
1998-04-15 00:00:00
我也觉得很纳闷。我觉得有可能与时区有关系

PYouLing123456789
历精图治 回复随手一码: 其实这个可以代码里面手动处理,只有这个是有问题的。
4 年多之前 回复
aiqqq000
随手一码 你把那个字符串时间改成任意其他时间就是正常的,唯独这个时间有这个问题~
4 年多之前 回复

神奇!我猜跟系统中英文语言可能有关,转换到特定点时会发生特殊变化。

改成其他时间都行,唯独这个时间不行,我也很郁闷,等待大神解答

改成其他时间都行,唯独这个时间不行,我也很郁闷,等待大神解答

改成其他时间都行,唯独这个时间不行,我也很郁闷,等待大神解答

网上搜索有人说是因为美国冬令时夏令时切换,会将时间调一个小时,会有一些日期的00:00:00不存在,直接从1点开始的,我这边遇到的日期就有,1989-04-16,1987-04-12,想问下有没有大佬有解决方案,服务器还不好切换时区

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问