java日历/格式提供错误的日期

java Calender/formatter provides wrong date

不知怎么的,我被报告了一个问题,下面的代码提供了未来的日期。

使用的时区是GMT+01:00。NumberOfDays是非负整数。

此代码的目的是减少从当前日期开始的天数。

1
2
3
4
5
6
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yy",Locale.ENGLISH);
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -numberOfDays);
Date date = calendar.getTime();
String dateStr= formatter.format(date);
System.out.println("Date :"+dateStr);

我不能在我的机器上复制这个。

区域设置是否影响时区?

我试图关联到为什么新的simpledateformat对象包含年份错误的日历?以及时区、日历和simpledateformat的奇怪问题,但都是徒劳的。

请帮助我理解并纠正这个问题。


好吧,有两种可能性我能想到:

  • 客户端计算机上的系统日期不正确,因此日历将以将来的日期开始
  • 如果numberOfDays为负数,它显然会将日期推向未来。

Locale与时区没有直接关系——它们是独立的,尽管很明显具有法语区域的机器可能位于法语时区等。

就我个人而言,我会完全避免使用日期/日历,并将Joda Time作为更好的日期和时间API,但这对我上面给出的任何一个想法都没有帮助…