【问题标题】:Make java.text.DateFormat parse to java.util.Calendar使 java.text.DateFormat 解析为 java.util.Calendar
【发布时间】:2013-03-20 11:15:40
【问题描述】:

通常,我是这样做的:

DateFormat f = new SimpleDateFormat("yyyy-MM-dd");
Date d = f.parse("2012-12-21");
Calendar c = Calendar.getInstance();
c.setTime(d);
bean.setDate(c);

但我刚刚找到了可行的解决方案:

DateFormat f = new SimpleDateFormat("yyyy-MM-dd");
f.parse("2012-12-21");
bean.setDate(f.getCalendar());

为什么在doc 中没有指定parse()(例如)记住解析后的值而不是简单地返回它?这是一个不好的方法吗?感觉自己被背叛了这么多年……

【问题讨论】:

  • 它可能有效,但 API 声明 parse 返回解析后的日期。我宁愿依赖公共指定的 API,也不愿依赖可能改变的实现细节。

标签: java date calendar date-format date-parsing


【解决方案1】:

日历是可变的,如果你用相同的 SimpeDateFormat 实例解析一个新的日期,你的 bean 的日期/日历可能会改变

【讨论】:

    【解决方案2】:

    我认为这很糟糕。 DateFormatCalendar 实例,用于在解析期间设置日期。这个实例可以用setCalendar 方法设置,例如,如果你想为另一个语言环境做实例。在解析日期之后,这个实例只是停留在以前的状态,也就是在当前的实现中,将来这个值可能会在parse 方法返回后被清除,所以我不会依赖这个实现。 getCalendar() 实际上已被使用,因此您可以查看当前使用的 Callendar 的“种类”、区域设置等,但不能用于获取当前值。

    【讨论】:

      【解决方案3】:

      我认为您不需要从日历创建实例并直接使用 dateFormat:

      DateFormat f = new SimpleDateFormat("yyyy-MM-dd");
      f.format(f.parse("2012-12-21"));
      bean.setDate(f.getCalendar());
      

      【讨论】:

        猜你喜欢
        • 2015-08-12
        • 1970-01-01
        • 2013-08-25
        • 2014-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-21
        相关资源
        最近更新 更多