添加或减少小时时Java Calendar奇怪的行为

时间:2014-11-17 18:17:09

标签: java calendar add

当我添加或减去小时时,似乎Calendar对象有一些意想不到的行为(至少我是这么认为)

有人可以解释一下,我先加2个小时后减去3个小时,所以我的时间应该比我开始时少1个。我在这里想错了什么?:

    Calendar calReference= new GregorianCalendar(2014,9,26);    
    sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    System.out.println("test dummy "+sdf.format(calReference.getTime()));
    calReference.add(Calendar.HOUR_OF_DAY, 2);
    //calReference.set(Calendar.MINUTE, 0);
    System.out.println("test dummy "+sdf.format(calReference.getTime()));
    calReference.add(Calendar.HOUR_OF_DAY, -3);
    //calReference.set(Calendar.MINUTE, 0);
    System.out.println("test dummy "+sdf.format(calReference.getTime()));

我得到的输出我没想到自己:

test dummy 2014/10/26 00:00:00

test dummy 2014/10/26 02:00:00

test dummy 2014/10/26 00:00:00 =>这应该是2014/10/25 23:00:00。

或者我自己错过了什么。

1 个答案:

答案 0 :(得分:0)

尝试将您想要的语言环境添加到SimpleDateFormat中:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.US);

Locale.getDefault()的Java文档声明:

  

Java虚拟机根据主机环境在启动期间设置默认语言环境。如果未明确指定语言环境,则许多语言环境敏感方法使用它。可以使用setDefault(Locale.Category,Locale)方法更改它。

因此,JVM中的默认语言环境可能不正确。

This post深入研究了如何确定应用程序的默认语言环境。