从java.util.Date中删除时间部分的正确方法是什么?

Cla*_*Bao 4 java date

我想实现一个线程安全的函数来从java.util.Date中删除时间部分.

我试过这种方式

private static final DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
public static Date removeTimeFromDate(Date date) {
        Date returnDate = date;

        if (date == null) {
            return returnDate;
        }

        //just have the date remove the time
        String targetDateStr = df.format(date);
        try {
            returnDate = df.parse(targetDateStr);
        } catch (ParseException e) {
        }

        return returnDate;
}
Run Code Online (Sandbox Code Playgroud)

并使用synchronized或threadLocal使其成为线程安全的.但它有更好的方法在Java中实现它.看来这种方式有点冗长.我对此不满意.

Mar*_*aux 9

Date对象保持变量至极表示时间以来的毫秒数时代.所以,你不能"删除"时间部分.您可以做的是将当天的时间设置为零,这意味着它将是当天的00:00:00 000.这是通过使用GregorianCalendar完成的:

GregorianCalendar gc = new GregorianCalendar();
gc.setTime(date);
gc.set(Calendar.HOUR_OF_DAY, 0);
gc.set(Calendar.MINUTE, 0);
gc.set(Calendar.SECOND, 0);
gc.set(Calendar.MILLISECOND, 0);
Date returnDate = gc.getTime();
Run Code Online (Sandbox Code Playgroud)