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

Che*_*eng 15 java

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

Date(int year, int month, int day) 
Run Code Online (Sandbox Code Playgroud)

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

Calendar calendar = Calendar.getInstance();
Date date = calendar.set(year, month, date).getTime();
Run Code Online (Sandbox Code Playgroud)

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

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

hel*_*ios 19

有了这个,你可以避免不必要的"现在时间"实例创建.

Date coolDate = new GregorianCalendar(year, month, day).getTime();
Run Code Online (Sandbox Code Playgroud)

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

无论如何,我同意Jon Skeet认为它不是那么昂贵.我同意你的看法,代码不需要默认的"现在"初始化.


Jon*_*eet 8

"相当昂贵"有些模糊.你实际上已经尝试使用您提供的代码,它测量并发现它昂贵?你是否有一个具体的想法,你需要这个操作有多便宜?

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

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

  • Joda Time可能有点过头了.与日历相关的"昂贵"是JDK 1.4天中持续存在的事情.我和OP一直存在同样的误解,直到我测试它并且可以很容易地实例化数十万个这样的问题. (2认同)
  • @cletus:我推荐Joda Time的大多数理由都不是为了加快速度 - 而是使用更好的API.我假设如果他正在创建一个Date,他也会使用它.Joda Time只是处理日期和时间的更好方式. (2认同)