java 8:只取年月日的java.util.Date(时分秒清零)对象
2016-12-28 13:25
856 查看
废弃的方法(@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 = Calendar.getInstance(); 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", cal1.getTime());// cal1.getTime()返回的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 localDate=now.toInstant().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);
参考资料:
《Java 8 – Convert Date to LocalDate and LocalDateTime》
相关文章推荐
- java.util.Date转换为java.sql.Date带时分秒
- Spring 整合 Flex (BlazeDS)无法从as对象 到 Java对象转换的异常:org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.util.Date' to required type 'java.sql.Timestamp' for property 'wfsj'; nested exception is java.lang.Ill
- java Date获取 年月日时分秒
- 基础回顾之java Date获取年月日时分秒
- 将Fri May 04 17:25:34 CST 2012形式的日期字符串转换成java.util.Date对象的方法
- 对象中含有java.util.Date时使用JSONArray.fromObject时时间显示问题
- 解决axis2处理java.util.Date类型对象时丢弃时间部分的问题
- java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间
- java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间
- java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间
- java.util.Date()类 用 @Temporal(TemporalType.TIME) 才能精确到时分秒!
- 对象(含有java.util.Date),集合等转化为json
- java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间
- 如何把java.util.Date对象保存到SQLServer中类型为datetime类型字段中
- 对象(含有java.util.Date),集合等转换成json
- java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间
- Java日期转换 SimpleDateFormat格式(年月日时分秒)
- java Date获取 年月日时分秒
- 对象(含有java.util.Date),集合等转换成json
- java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间