这是Linux中Java.Calendar中的错误吗?年未更新

时间:2014-01-02 13:22:31

标签: 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());
    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

以上与预期结果相符。

运行的Linux机器上的输出:

    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
这是奇怪的不是吗?有什么好的解决方法吗?

2 个答案:

答案 0 :(得分:7)

也许您使用模式符号Y而不是y构建了格式对象。 Y代表一周的年份,而不是正常的iso日历年。它依赖于语言环境,尤其取决于一周开始的时间。因此,Windows机器和Linux服务器上的区域设置可能会有所不同。请记住,java.util.Calendar也依赖于语言环境。

尝试new SimpleDateFormat("yyyy-MM-dd");

答案 1 :(得分:5)

SimpleDateFormat中的一年格式错误。您应该使用y代替Y