【问题标题】:Java Calendar.set not giving correct resultJava Calendar.set 没有给出正确的结果
【发布时间】:2009-07-20 10:47:40
【问题描述】:

我看不出下面的代码哪里出了问题,这可能是显而易见的,但在这个阶段我太盲目了,看不到它。我将“01/01/2009”的日期传递给日历实例。然后我尝试将三月的月份设置为 2,我看到的输出是

格式化:01/01/2009

日历月:2

cal.set( Calendar.MONTH, mth ); //mth = int 2

log.debug("formatted: " + formatter.format(cal.getTime()));
log.debug("cal month: "+Integer.valueOf(cal.get(Calendar.MONTH)).toString());

当我将 Calendar.DAY 设置为最大值时,日期显示为 2009 年 1 月 31 日

为什么我的月份设置不被占用?

【问题讨论】:

  • 给我们重现错误的实际工作代码 - 像上面这样的摘录通常会错过真正的问题。

标签: java date calendar


【解决方案1】:

我们遇到了这个问题,结果是在您实际尝试从日历中“获取”值之前,您设置的值不会被使用。我们很困惑,因为使用调试器时该值似乎从未被设置,但当您真正“获取”它时,它就可以工作了。

http://download.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html

获取和设置日历字段值

可以通过调用 set 方法来设置日历字段值。在需要计算其时间值(距纪元的毫秒数)或日历字段的值之前,不会解释日历中设置的任何字段值。调用get、getTimeInMillis、getTime、add、roll都涉及到这样的计算。

【讨论】:

    【解决方案2】:

    我会仔细研究到底发生了什么,但一般的经验法则是:不要使用 java.util.{Date,Calendar}。请改用Joda Time...它如此更干净...

    编辑:我目前无法重现您的问题。我仍然建议使用 Joda,但如果您可以发布一个简短但完整的程序来演示问题,我们或许能够找出问题所在。

    编辑:根据另一条评论,我想知道您的格式化程序是否错误......您真的使用“dd/mm/yyyy”而不是“dd/MM/yyyy”吗? “mm”表示分钟,而不是月。

    【讨论】:

    • 谢谢@Jon,我去看看。
    【解决方案3】:

    也许您想使用 Calendar.DAY_OF_MONTH

    【讨论】:

      猜你喜欢
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-01
      • 2015-11-12
      • 2012-08-30
      相关资源
      最近更新 更多