这是Linux中Java.Calendar中的一个bug吗?年份未更新
我发现在运行Linux的服务器上发生了一些奇怪的事情,而执行相同代码的windows机器却正常运行 它发生在以下代码中:这是Linux中Java.Calendar中的一个bug吗?年份未更新,java,linux,calendar,Java,Linux,Calendar,我发现在运行Linux的服务器上发生了一些奇怪的事情,而执行相同代码的windows机器却正常运行 它发生在以下代码中: public static final SimpleDateFormat sqlDateFormat = new SimpleDateFormat("Y-M-d"); Calendar cal = Calendar.getInstance(); String now = sqlDateFormat.format(cal.getTime());
public static final SimpleDateFormat sqlDateFormat = new SimpleDateFormat("Y-M-d");
Calendar cal = Calendar.getInstance();
String now = sqlDateFormat.format(cal.getTime());
System.out.println(now);
cal.add(Calendar.DAY_OF_MONTH, -4);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
String trsh = sqlDateFormat.format(cal.getTime());
System.out.println(trsh);
正在运行的windows计算机上的输出:
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)
Output:
2014-01-02
2013-12-29
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b108)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b50, mixed mode)
Output:
2014-01-02
2014-12-29
上述结果与预期结果相符
运行以下命令的Linux计算机上的输出:
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)
Output:
2014-01-02
2013-12-29
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b108)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b50, mixed mode)
Output:
2014-01-02
2014-12-29
这很奇怪,不是吗?有什么好的解决方法吗?也许您已经用模式符号Y而不是Y构建了format对象。Y代表工作日的年份,而不是正常的iso日历年。它取决于区域设置,尤其取决于一周的开始时间。因此,windows计算机和linux服务器上的区域设置可能不同。请记住,java.util.Calendar也依赖于语言环境
尝试新的SimpleDataFormat(“yyyy-MM-dd”)代码>一年中的格式错误。您应该使用
y
而不是ySun Dec 29 00:00:30 IST 2013 1.8.0-ea Mac OS XCalendar cal=Calendar.getInstance();cal.add(日历日/月日,-4);校准设置(日历小时/天,0);校准设置(日历分钟,0);System.out.println(cal.getTime());System.out.println(System.getProperty(“java.version”);System.out.println(System.getProperty(“os.name”)代码>这很奇怪。也许这是一个愚蠢的观点,但试着减去一两秒钟——这有什么区别吗?很久以前,我遇到了一个类似的bug,出于某种奇怪的原因,这是一个解决方法。。。我承认这是不可能的。所以它在MacOSX上似乎工作得很好。OSX使用的不是同一个库吗?哇,谢谢,这是一个很好的发现!这就解决了问题!这也解释了为什么这个问题昨天还没有出现…@BasGoossen:一个很好的经验法则:当你认为它是Java中的一个bug时,在你对Java的理解中,它实际上是一个bug的可能性很大。这条规则对我很有效,对你也应该很有效。我说的概率是100万对1甚至更多。说真的。@Hovercraft:你说得对,我已经在bug注释中添加了一个问号。从没想过语言环境设置。检查系统两次,但忘记了区域设置。