这是Linux中Java.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

这很奇怪不是吗?有什么好的解决方法吗?

解决方法

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

尝试新的SimpleDateFormat(“yyyy-MM-dd”);

相关文章

/etc/sysctl.conf这个目录主要是配置一些系统信息,/etc/sys...
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起...
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅...
不管是我们在安装软件还是监测软件的使用性能,我们都要随时...
装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。...
修改防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,...