将java.text.DateFormat解析为java.util.Calendar

时间:2013-03-20 11:15:41

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

通常,我这样做:

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()(例如)在解析后记住值而不是简单地返回它?这是一个糟糕的方式吗?我觉得这些年来被背叛了......

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

我认为这很糟糕。 DateFormat具有Calendar实例,用于在解析期间设置日期。如果要为其他语言环境执行实例,则可以使用setCalendar方法设置此实例。在解析日期之后,这个实例只是保持在先前状态并且在当前实现中,将来这个值可能在parse方法返回后清除,所以我不会依赖这个实现。事实上getCalendar()已被使用,因此您可以查看当前正在使用的Callendar类型,哪种语言环境等,但不能获取当前值。

答案 2 :(得分:0)

我认为你不需要从Calendar创建实例并直接使用dateFormat:

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