我是否知道使用特定日期,月份和年份构建日期对象的最有效方法是什么。
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)而不告诉其余的?
请不要建议使用任何第三方库。
答案 0 :(得分:18)
通过这种方式,您可以避免不必要的“现在时间”实例创建。
Date coolDate = new GregorianCalendar(year, month, day).getTime();
您可以检查GregorianCalendar javadoc以获取其他构造函数。你有日期+时间和时区。
无论如何,我同意Jon Skeet的说法并不是那么贵。我同意你的看法,代码不需要默认的“现在”初始化。
答案 1 :(得分:8)
“相当昂贵”有些模糊。您是否真的尝试使用您提供的代码,测量它并发现它太昂贵?你有一个具体的想法,你需要这个操作有多便宜吗?
此外,您尚未指定希望Date
中的值表示哪个时区。世界标准时间?默认时区?您希望它在一天中的什么时间 - 午夜或当前时间?您当前的代码将保留现有的时间 - 这真的是您想要的吗?
(正如我在评论中提到的,我强烈建议你转到Joda Time - 但即使你没有,你仍然应该检查你是否真的遇到现有代码的问题,然后再寻找一个解决方案。)
答案 2 :(得分:1)
无论你使用什么,只要它在Java Standard API中,它将涉及使用Calendar
(Date
构造函数和SimpleDateFormat
在内部使用它),所以有没有必要担心该课程的低效率。
答案 3 :(得分:1)
我会这样做:
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date thisDate = formatter.parse("2010-03-04");
从代码的角度来看,它非常有效;我不能说它的日历运行效率。