构建日期 - 一种有效的方式

时间:2010-03-04 14:09:38

标签: java

我是否知道使用特定日期,月份和年份构建日期对象的最有效方法是什么。

Date(int year, int month, int day) 

此结构已折旧。因此,我通常做的是:

Calendar calendar = Calendar.getInstance();
Date date = calendar.set(year, month, date).getTime();

但是,我的理解是Calendar.getInstance()相当昂贵。构造Date对象的最有效方法是什么?或者我应该静静地使用Date(int year,int month,int day)而不告诉其余的?

请不要建议使用任何第三方库。

4 个答案:

答案 0 :(得分:18)

通过这种方式,您可以避免不必要的“现在时间”实例创建。

Date coolDate = new GregorianCalendar(year, month, day).getTime();

您可以检查GregorianCalendar javadoc以获取其他构造函数。你有日期+时间和时区。

无论如何,我同意Jon Skeet的说法并不是那么贵。我同意你的看法,代码不需要默认的“现在”初始化。

答案 1 :(得分:8)

“相当昂贵”有些模糊。您是否真的尝试使用您提供的代码,测量它并发现它昂贵?你有一个具体的想法,你需要这个操作有多便宜吗?

此外,您尚未指定希望Date中的值表示哪个时区。世界标准时间?默认时区?您希望它在一天中的什么时间 - 午夜或当前时间?您当前的代码将保留现有的时间 - 这真的是您想要的吗?

(正如我在评论中提到的,我强烈建议你转到Joda Time - 但即使你没有,你仍然应该检查你是否真的遇到现有代码的问题,然后再寻找一个解决方案。)

答案 2 :(得分:1)

无论你使用什么,只要它在Java Standard API中,它将涉及使用CalendarDate构造函数和SimpleDateFormat在内部使用它),所以有没有必要担心该课程的低效率。

答案 3 :(得分:1)

我会这样做:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date thisDate = formatter.parse("2010-03-04");

从代码的角度来看,它非常有效;我不能说它的日历运行效率。