java valueof只取年⽉⽇的java.util.Date对象将时分秒清零
废弃的⽅法(@Deprecated)
如果不想要java.util.Date中的时分秒数据,希望将它清零,只保留年⽉⽇,最简单的办法是
调⽤setHours,setMinutes,setSeconds⽅法清零。
Date now = new Date();
now.setHours(0);
now.setMinutes(0);
now.setSeconds(0);
// 输出Date的⽇期和时间部分 yyyy-MM-dd HH:MM:SS
System.out.printf("%1$tF %1$tT\n",now);
不过这些⽅法已经被弃⽤了,但对绝⼤部分系统,都没问题。
如果讲究点⼉,还是遵循建议不⽤为好。
java.util.Calendar
既然不建议⽤Date中的setHours,setMinutes,setSeconds⽅法对时分秒清零,java的代码中也提⽰了,可以改⽤Calendar.set(int field, int value)⽅法来对指定的域清零
Date now = new Date();
Calendar cal1 = Instance();
cal1.setTime(now);
// 将时分秒,毫秒域清零
cal1.set(Calendar.HOUR_OF_DAY, 0);
cal1.set(Calendar.MINUTE, 0);
cal1.set(Calendar.SECOND, 0);
cal1.set(Calendar.MILLISECOND, 0);
System.out.printf("%1$tF %1$tT\n", Time());// Time()返回的Date已经是更新后的对象
java.time.LocalDate
上⾯的办法略显复杂啊,有没有理想简洁的途径让我少写点代码呢?
java8提供了⼀个新的类LocalDate,是⼀个不包含时区,ISO-8601 格式的⽇期类(⽐如 “2016-12-28”),LocalDate对象是个只读取的(immutable class),java.util.Date可以转换为LocalDate。
java.sql.Date是java.util.Date的⼦类,是为了配合SQL DATE⽽设置的数据类型。java.sql.Date只包含年⽉⽇信息,时分秒毫秒都会清零。格式类似:YYYY-MM-DD。
在java8中LocalDate可以转换成java.sql.Date
这两者⼀结合,也就可以将Date转换为时分秒清零0的对象,⽽且代码更简洁,⼀⾏就能搞定。
Date now = new Date();
// java.util.Date -> java.time.LocalDate
LocalDate Instant().atZone(ZoneId.systemDefault()).toLocalDate();
// java.time.LocalDate -> java.sql.Date
Date newDate=java.sql.Date.valueOf(localDate);
System.out.printf("%1$tF %1$tT\n", newDate);
参考资料: