【发布时间】:2011-06-30 07:51:15
【问题描述】:
从堆栈溢出问题继续Java program to get the current date without timestamp:
在没有时间的情况下获取 Date 对象的最有效方法是什么?除了这两种方法还有其他方法吗?
// Method 1
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dateWithoutTime = sdf.parse(sdf.format(new Date()));
// Method 2
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
dateWithoutTime = cal.getTime();
更新:
我知道Joda-Time;我只是想避免为这样一个简单的(我认为)任务添加额外的库。但根据目前为止的答案,Joda-Time 似乎非常受欢迎,所以我可能会考虑它。
高效,我的意思是我想避免
method 1使用的临时对象String创建,同时method 2似乎是一种技巧而不是解决方案。
【问题讨论】:
-
高效?您是否需要比方法 1 提供的效率更高的效率?
-
“高效”是什么意思?日期基本上是一个长类型的,你不能在比这更少的内存中真正做到这一点。如果你的意思是“方便”,JODA time 是最好的选择。
-
我喜欢方法2。在实用程序类中创建一个静态方法并使用它。多年来我一直采用这种方法。
-
对您的“更新 1”进行吹毛求疵:如果它是“如此简单的任务”,我猜 Sun 不会使用如此可怕和低效的 API,而您(以及许多其他人) ) 根本不会问这个问题 ;-)
-
@RobertoLinares:为什么它“不短”很重要?每一行都高效。我敢肯定它比方法 1 快很多,方法 1 涉及格式化和解析。