2011-03-07 105 views
0

不知何故我报告了一个问题,其中以下代码将来会提供日期。java日历/格式化程序提供了错误的日期

所用的时区为格林尼治标准时间+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); 

我无法在我的机器上重现此操作。

区域设置是否影响时区?

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

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

+0

适合我的作品(打印日期:2月25日11日为我;我在格林威治标准时间)。你的系统在哪个时区? – adarshr 2011-03-07 11:40:20

+0

只是为了澄清:在哪里能够在本地重现问题?或者你刚收到未经验证的报告? – 2011-03-07 11:42:16

+0

也许应该是DAY_OF_YEAR而不是DAY_OF_MONTH? – 2011-03-07 11:44:28

回答

2

好了,两种可能性,我能想到的把我的头顶部:

  • 在客户机上的系统日期是不正确的,所以日历开始在未来
  • 日期如果numberOfDays为负,这将明显推动日期到未来

Locale是没有直接关系的时间段 - 他们是独立的,虽然很明显与法国语言环境的机器是可能是在法国时区等

个人而言,我会尽量避免使用日期/日历完全和使用Joda Time更好的日期和时间API,但止跌” t帮助我提出的想法之一...

+0

感谢您的回复。从被告知的日期正确设置,numberOfDays是非负整数。如果没有提供错误原因,我不能真正改变实现,因此不能使用Joda时间。 – Nilesh 2011-03-07 12:03:00

+0

@Nilesh:你可以在*调用'add'(和'numberOfDays'的值)之前打印日期*以用于诊断目的?你与有问题的人有什么关系? – 2011-03-07 12:04:14

+0

在“add”之前,我可以在本地机器上看到正确的日期;此外,numberOfDays并不是负面的,有这个问题的客户远远不可达,我没有任何信息/访问发生这种情况的地方。 – Nilesh 2011-03-07 12:15:28