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

时间:2011-03-07 11:37:01

标签: java

不知何故,我被报告了一个问题,以下代码提供了日期。

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

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

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);

我无法在我的机器上重现这一点。

Locale是否会影响TimeZone?

我尝试与Why does a new SimpleDateFormat object contain calendar with the wrong year?Strange problem with timezone, calendar and SimpleDateFormat相关联但是徒劳无功。

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

1 个答案:

答案 0 :(得分:2)

嗯,我可以想到两种可能性:

  • 客户端计算机上的系统日期不正确,因此日历启动并显示日期
  • 如果numberOfDays为否定,则显然会将日期推迟到将来

Locale与时区没有直接关系 - 它们是独立的,但很明显,具有法语区域设置的机器可能属于法国时区等。

就个人而言,我会完全避免使用日期/日历,并使用Joda Time作为很多更好的日期和时间API,但这对我上面给出的任何一个想法都无济于事。 ..