将 Date 对象转换为日历对象 [duplicate]

Converting a Date object to a calendar object [duplicate]

提问人:Will 提问时间:5/31/2011 更新时间:11/1/2016 访问量:397954

问:

因此,我从传入对象中获取日期属性,其形式为:

Tue May 24 05:05:16 EDT 2011

我正在编写一个简单的辅助方法将其转换为日历方法,我使用的是以下代码:

    public static Calendar DateToCalendar(Date date ) 
{ 
 Calendar cal = null;
 try {   
  DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
  date = (Date)formatter.parse(date.toString()); 
  cal=Calendar.getInstance();
  cal.setTime(date);
  }
  catch (ParseException e)
  {
      System.out.println("Exception :"+e);  
  }  
  return cal;
 }

为了模拟传入的对象,我只是在当前使用的代码中分配值:

private Date m_lastActivityDate = new Date();

但是,一旦方法达到,这就会给我一个空指针:

date = (Date)formatter.parse(date.toString()); 
Java 日期 日历 nullPointerException

评论

1赞 Anonymous 5/27/2019
对于迟到的人:我建议你既不使用也不使用。这些课程设计得很差,早已过时。请改用 java.time 中的 和 ,即现代 Java 日期和时间 APIDateCalendarInstantZonedDateTime

答:

517赞 Sean Patrick Floyd 5/31/2011 #1

这是你的方法:

public static Calendar toCalendar(Date date){ 
  Calendar cal = Calendar.getInstance();
  cal.setTime(date);
  return cal;
}

你所做的其他一切都是错误的,也是不必要的。

顺便说一句,Java 命名约定建议方法名称以小写字母开头,因此应该是:或(如图所示)。dateToCalendartoCalendar


好吧,让我们挤奶你的代码,好吗?

DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
date = (Date)formatter.parse(date.toString()); 

DateFormat用于将字符串转换为日期 () 或将日期转换为字符串 ()。您可以使用它来将 Date 的 String 表示形式分析回 Date。这不可能是对的,不是吗?parse()format()

评论

0赞 Will 5/31/2011
非常感谢伙计。我实际上得到了一个网站的代码。鉴于上述方法的干净性,我现在开始感觉到我的 intToCalendar 方法有点臃肿 ' public static Calendar intToCalendar(int i) {' Calendar cal = null; try { String stringInt = String.valueOf(i);DateFormat 格式化程序 = new SimpleDateFormat(“yyyyMMdd”);日期 date = (Date)formatter.parse(stringInt);cal=日历.getInstance();cal.setTime(日期);} catch (ParseException e) { System.out.println(“异常:”+e);返回 cal;}`
1赞 Sean Patrick Floyd 5/31/2011
@Will a) 不要使用 int,使用 long。日期包含的值大于 int 可以存储的值。b) 使用 new Date(long)
1赞 Chris 3/16/2013
看起来原始问题中的代码不仅旨在转换为 ,而且还旨在同时从日期中删除时间。如何正确地做后者可以在这里找到。而不是使用 ,请尝试DateCalendar(Date)formatter.parse(date.toString());formatter.parse(formatter.format(date));
0赞 Andy 10/1/2013
我认为原始代码试图仅解析格式化日期的年-月-日,以便将日历设置为一天的开始,而不是一天中的时间。可爱的方式(尝试)这样做,虽然等更好。set(HOUR_OF_DAY, 0)
-7赞 jsina 3/13/2013 #2

就是这么简单...将日期转换为日历,如下所示:

Calendar cal=Calendar.getInstance();
DateFormat format=new SimpleDateFormat("yyyy/mm/dd");
format.format(date);
cal=format.getCalendar();

评论

5赞 ToolmakerSteve 9/7/2015
两年前公认的解决方案是一种更清洁的方法。请注意,此代码具有隐藏的假设,即与关联的日历对象当前保存我们刚刚格式化的日期,并且作为使用没有小时/分钟/秒的日期进行格式化的副作用,该内部日期也没有小时/分钟/秒。也许,但没有记录在案的行为。做公认的答案所做的事情,这直接说明了我们想要做什么。如果您随后想要删除小时/分钟/秒,请参阅对已接受答案的评论,了解如何执行此操作。format
25赞 David Trujillo 8/21/2016 #3

只需使用 Apache Commons

DateUtils.toCalendar(日期日期)