Java的日历/格式化程序提供了错误的日期

13 浏览
0 Comments

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

我在我的机器上无法重现这个问题。

本地化是否影响时区?

我尝试联系到为什么一个新的SimpleDateFormat对象包含错误年份的日历?时区、日历和SimpleDateFormat的奇怪问题,但都没有用。

请帮助我了解和纠正这个问题。

admin 更改状态以发布 2023年5月22日
0
0 Comments

理论上,我能想到头两种可能性:

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

Locale与时区无直接关系-它们是独立的,尽管显然具有法语区域设置的机器可能位于法国时区等。

个人建议完全避免使用Date/Calendar,而要使用Joda Time作为更好的日期和时间API,但这不会解决我上面给出的两种可能性中的任何一种...

0