从JDK中仅使用Classes从Java日期对象中删除时间部分的最有效方法是什么?
我有以下内容
myObject.getDate()= {java.util.Date}"Wed May 26 23:59:00 BST 2010"
要将时间重置回00:00:00,我正在执行以下操作
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date myDate = sdf.parse(sdf.format(myObject.getDate()));
Run Code Online (Sandbox Code Playgroud)
输出现在
myDate = {java.util.Date}"Wed May 26 00:00:00 BST 2010"
有没有更好的方法来实现相同的结果?
kgi*_*kis 10
更详细,但可能更有效:
Calendar cal = GregorianCalendar.getInstance();
cal.setTime(date);
// cal.set(Calendar.HOUR, 0); // As jarnbjo pointed out this isn't enough
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
Run Code Online (Sandbox Code Playgroud)
此外,您无需担心区域设置,这可能会导致字符串到日期转换出现问题.
如果您有Apache commons,则可以使用DateUtils.truncate():
Date myDate = DateUtils.truncate(myObject.getDate(), Calendar.DATE)
Run Code Online (Sandbox Code Playgroud)
(如果您无法访问Apache Commons,则DateUtils.truncate()的实现与kgiannakakis的答案基本相同.)
现在,如果您想要非常快速的"聪明"代码,并且您不介意使用已弃用的函数java.util.Date,那么这是另一种解决方案.(免责声明:我不会自己使用这个代码.但是我已经测试了它,它可以工作,即使在DST开始/结束的日子也是如此.)
long ts = myObject.getDate().getTime() - myObject.getDate().getTimezoneOffset()*60000L;
Date myDate = new Date(ts - ts % (3600000L*24L));
myDate.setTime(myDate.getTime() + myDate.getTimezoneOffset()*60000L);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5876 次 |
| 最近记录: |