java 8:只取年月日的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 = 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》

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(81)-数据筛选(万能查询)

前言 听标题的名字似乎是一个非常牛X复杂的功能,但是实际上它确实是非常复杂的,我们本节将演示如何实现对数据,进行组合查询(数据筛选) 我们都知道Excel...

2168
来自专栏菩提树下的杨过

Flash/Flex学习笔记(30):不用startDrag和stopDrag的对象拖动

对于从Sprite类继承来的对象,要实现拖放当然是Flash/Flex学习笔记(13):对象拖动(startDrag/stopDrag) 里讲的方法最方便,但是...

18810
来自专栏更流畅、简洁的软件开发方式

[自定义服务器控件] 第二步:下拉列表框。

前面发了一个文本框的,这回发一个下拉列表框。 一般在写自定义控件之前都要考虑一下原来的控件(系统代的)有什么优缺点,有哪些功能是我想要的,但是自带的控件没有提...

2376
来自专栏一个会写诗的程序员的博客

禅与 JavaScript 编程艺术, Zen and The Art of JavaScript Programming禅与 JavaScript 编程艺术

Zen and The Art of JavaScript Programming

641
来自专栏技术之路

Caliburn.Micro学习笔记(五)----协同IResult

今天说一下协同IResult 看一下IResult接口 /// <summary> /// Allows custom code to execute...

1858
来自专栏杂烩

spring-data-mongodb使用mongoTemplate开发示例

使用mongoTemplate比直接定义接口不用写实现那种复杂点,但有时候在一些特殊操作上,可能使用mongoTemplate更容易些。以下记录以下使用mong...

3542
来自专栏ASP.NET MVC5 后台权限管理系统

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)-系统日志和异常的处理①

系统需要越来越自动化,我们需要引入日志记录和异常捕获 管理员的操作记录需要被记录,看出哪些模块是频繁操作,分析哪些是不必要的功能,哪些是需要被优化的。 系统的异...

2518
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构

前言:这是对本文系统一次重要的革新,很久就想要重构数据访问层了,数据访问层重复代码太多。主要集中增删该查每个模块都有,所以本次是为封装相同接口方法    如果你...

2216
来自专栏跟着阿笨一起玩NET

ZPL打印中文信息

  相信各位在实际的项目中,需要开发打条码模块的也会有不少,很多同行肯定也一直觉得斑马打印机很不错,但是ZPL打印中文字符很麻烦。如果购买字体卡,或者通过COD...

1451
来自专栏码农阿宇

JustMock .NET单元测试利器(三)用JustMock测试你的应用程序

用JustMock测试你的应用程序 本主题将指导您通过几个简单的步骤来使用Telerik®JustMock轻松测试您的应用程序。您将理解一个简单的原理,称为Ar...

3597

扫码关注云+社区