从堆栈溢出问题100继续:

在没有时间的情况下获取日期对象最有效的方法是什么?除了这两个,还有别的办法吗?

// Method 1
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dateWithoutTime = sdf.parse(sdf.format(new Date()));

// Method 2
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
dateWithoutTime = cal.getTime();

Update:

  1. 我知道大约Joda-Time个;我只是想避免为这么简单(我认为)的任务增加库.但从目前为止的答案来看,Joda-Time似乎非常受欢迎,所以我可能会考虑一下.

  2. efficient,我的意思是我想避免method 1使用的临时对象String创建,而method 2看起来像是一个黑客而不是解决方案.

推荐答案

你绝对have要用java.util.Date吗?我建议您改用Java8中的Joda Timejava.time包.具体地说,虽然日期和日历always表示时间上的特定时刻,而没有诸如"仅仅是日期"这样的概念,但是Joda时间does具有表示这一时刻的类型(LocalDate).如果您能够使用表示您实际要做的事情的类型,您的代码将会清晰得多.

使用Joda Time或java.time而不是内置java.util类型还有很多其他原因——它们通常是更好的API.如果需要,您可以随时在自己的代码边界处转换为java.util.Date或从java.util.Date转换,例如用于数据库交互.

Java相关问答推荐

试图弄清楚资源未能在我的Android应用程序中调用关闭警告

如何在Spring Boot中创建500错误的响应正文?

Java应用程序崩溃时试图读取联系人从电话

Android Studio—java—在onBindViewHolder中,将断点和空白添加到BackclerView中

无法传递消费者<;>;实例

Jlink选项&-strie-ative-Commands";的作用是什么?

如何创建同一类的另一个对象,该对象位于变量中?

为什么S的文档中说常量方法句柄不能在类的常量池中表示?

生成桥方法以解决具有相同擦除的冲突方法

从ActiveMQ Classic迁移到ActiveMQ Artemis需要进行哪些客户端更改?

从Spring6中的JPMS模块读取类时出现问题

IntelliJ IDEA依赖项工具窗口丢失

JavaFX:无论何时显示应用程序,如何更改组件/ node 位置?

使用MediaPlayer类在一段时间后停止播放音乐

我该如何为我的类编写getter和setter方法?

H2数据库仅支持%1个结果集?

如何通过用户ID向用户发送私信

如何在Spring Boot中为不同的部署环境管理多个.properties文件?

获取401未经授权,即使在标头中设置了浏览器名称和cookie

原始和参数化之间的差异调用orElseGet时可选(供应商)