当我添加或减去小时时,似乎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。
或者我自己错过了什么。
答案 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深入研究了如何确定应用程序的默认语言环境。