java日历/格式提供错误的日期
Posted
技术标签:
【中文标题】java日历/格式提供错误的日期【英文标题】:java Calender/formatter provides wrong date 【发布时间】:2011-07-10 07:18:53 【问题描述】:不知何故,我被报告了一个问题,其中以下代码提供了未来的日期。
使用的时区是 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);
我无法在我的机器上重现此内容。
语言环境会影响时区吗?
我试图与Why does a new SimpleDateFormat object contain calendar with the wrong year? 和Strange problem with timezone, calendar and SimpleDateFormat 相关联,但徒劳无功。
请帮助我理解并纠正这个问题。
【问题讨论】:
实际上为我工作(为我打印Date : 25 Feb 11
;我在格林威治标准时间)。您的系统在哪个时区?
只是为了澄清:您可以在哪里重现问题?还是您刚刚收到一份未经证实的报告?
也许应该是 DAY_OF_YEAR 而不是 DAY_OF_MONTH ?
@adarshr:对我也有用,我已将系统时区更改为 GMT+1.00 @Martin:谢谢,但除非我证明有必要,否则我没有权限更改实现。 @Joachim Sauer:我仍然无法重现问题
【参考方案1】:
嗯,我能想到两种可能性:
客户端计算机上的系统日期不正确,因此日历以未来的日期开始 如果numberOfDays
为负数,显然会将日期推到未来
Locale
与时区没有直接关系——它们是独立的,尽管显然具有法国语言环境的机器可能在法国时区等。
就我个人而言,我会完全避免使用日期/日历并使用Joda Time 作为一个更更好的日期和时间 API,但这对我上面给出的任何一个想法都没有帮助......
【讨论】:
感谢您的回复。据了解,日期设置正确,numberOfDays 为非负整数。如果不提供错误原因,我无法真正更改实现,因此无法使用 Joda Time。 @Nilesh:您能否打印出调用add
(以及numberOfDays
的值)之前 的日期以用于诊断目的?您与有问题的人的关系如何?
我可以在本地机器上看到add
之前的正确日期; numberOfDays 也不是负数,有这个问题的客户是遥不可及的,我没有任何信息/访问发生这种情况的地方。
@Nilesh:恐怕这就是你需要获取信息的地方。 numberOfDays 是肯定的并且日期在您无法重现问题的机器上是正确的,我并不感到惊讶 :)以上是关于java日历/格式提供错误的日期的主要内容,如果未能解决你的问题,请参考以下文章