如何在 Java 中获取没有时间的日期?

新手上路,请多包涵

继续 Stack Overflow 问题 Java program to get the current date without timestamp

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

 // 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();

更新

  1. 我知道 Joda-Time ;我只是想避免为这样一个简单的(我认为)任务添加额外的库。但根据目前的答案,Joda-Time 似乎非常受欢迎,所以我可能会考虑。

  2. 通过 _高效_,我的意思是我想避免临时对象 String 创建 method 1 ,同时 method 2 解决方案似乎是一个。

原文由 Rosdi Kasim 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 876
2 个回答

你绝对 必须 使用 java.util.Date 吗?我强烈建议您改用 Joda Time 或 Java 8 中的 — java.time 包。特别是,虽然 Date 和 Calendar 总是 代表一个特定的时刻,没有“只是一个日期”这样的概念,但 Joda Time 确实 有一个类型代表这个( LocalDate )。如果您能够使用代表您实际尝试做的事情的类型,您的代码将会更加清晰。

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

原文由 Jon Skeet 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是我用来获取今天日期的方法,时间设置为 00:00:00

 DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");

Date today = new Date();

Date todayWithZeroTime = formatter.parse(formatter.format(today));

原文由 Shobbi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题