Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是Linux中Java.Calendar中的一个bug吗?年份未更新_Java_Linux_Calendar - Fatal编程技术网

这是Linux中Java.Calendar中的一个bug吗?年份未更新

这是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());

我发现在运行Linux的服务器上发生了一些奇怪的事情,而执行相同代码的windows机器却正常运行

它发生在以下代码中:

    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
而不是
y

Sun Dec 29 00:00:30 IST 2013 1.8.0-ea Mac OS X
Calendar 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注释中添加了一个问号。从没想过语言环境设置。检查系统两次,但忘记了区域设置。