提问人:Will 提问时间:5/31/2011 更新时间:11/1/2016 访问量:397954
将 Date 对象转换为日历对象 [duplicate]
Converting a Date object to a calendar object [duplicate]
问:
因此,我从传入对象中获取日期属性,其形式为:
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());
答:
517赞
Sean Patrick Floyd
5/31/2011
#1
这是你的方法:
public static Calendar toCalendar(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal;
}
你所做的其他一切都是错误的,也是不必要的。
顺便说一句,Java 命名约定建议方法名称以小写字母开头,因此应该是:或(如图所示)。dateToCalendar
toCalendar
好吧,让我们挤奶你的代码,好吗?
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
看起来原始问题中的代码不仅旨在转换为 ,而且还旨在同时从日期中删除时间。如何正确地做后者可以在这里找到。而不是使用 ,请尝试Date
Calendar
(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
评论
Date
Calendar
Instant
ZonedDateTime