【发布时间】:2011-10-14 14:51:05
【问题描述】:
在我的代码中,我需要找到我今天发生的所有事情。所以我需要比较从今天上午 00:00(今早午夜)到下午 12:00(今晚午夜)的日期。
我知道...
Date today = new Date();
...现在就抓住我。还有……
Date beginning = new Date(0);
...让我在 1970 年 1 月 1 日获得零时间。但是,有什么简单的方法可以让今天的时间为零,明天的时间为零?
更新
我这样做了,但肯定有更简单的方法吗?
Calendar calStart = new GregorianCalendar();
calStart.setTime(new Date());
calStart.set(Calendar.HOUR_OF_DAY, 0);
calStart.set(Calendar.MINUTE, 0);
calStart.set(Calendar.SECOND, 0);
calStart.set(Calendar.MILLISECOND, 0);
Date midnightYesterday = calStart.getTime();
Calendar calEnd = new GregorianCalendar();
calEnd.setTime(new Date());
calEnd.set(Calendar.DAY_OF_YEAR, calEnd.get(Calendar.DAY_OF_YEAR)+1);
calEnd.set(Calendar.HOUR_OF_DAY, 0);
calEnd.set(Calendar.MINUTE, 0);
calEnd.set(Calendar.SECOND, 0);
calEnd.set(Calendar.MILLISECOND, 0);
Date midnightTonight = calEnd.getTime();
【问题讨论】:
-
在我看来 Joda Time 比较容易,看我回答的结尾。如果你想使用 java.util.Date/Calendar 你必须这样做,没有更简单的方法。
-
RE:使用 Joda-Time 的 timaschew 注释,知道 Joda-Time 项目现在处于维护模式,并建议迁移到 java.time 类。
-
仅供参考,非常麻烦的旧日期时间类,如
java.util.Date、java.util.Calendar和java.text.SimpleDateFormat现在是 legacy,被 Java 8 中内置的 java.time 类所取代,之后。见Tutorial by Oracle。 -
很少会看到这么多有缺陷的问题答案。我推荐the answer by Basil Bourque,它是正确的和知识渊博的。
-
尝试将
hh:mm aa作为11:59 pm连接到SimpleDateFormat对象