我在Java 7。
我是尤达-时间的新手,我想问一个简单的问题。上周一凌晨2点怎么去。日期?我是说这个:
____________________________________________________________________________
Week 1 | Week 2 |
______________________________________________________________|_____________|
MONDAY TUESDAY WENDSDAY THURSDAY FRIDAY SATURDAY SUNDAY| MONDAY ... |
2-00 a.m. | 2-00 a.m. |
______________________________________________________________|_____________|所以,我需要返回Week 1的周一凌晨2点,,,目前的时间是从Week 1的周一凌晨2点到Week 2的周一的2-00 a.m.。
有什么相对简单的方法可以通过Joda-Time实现这一点?
发布于 2015-11-21 06:34:56
首先,在Joda-Time中找到一个解决方案.其次,在新的java.time框架中构建了一个类似的解决方案,内置到Java8和更高版本中,作为Joda-Time的继承者。见教程。
以下两种解决方案都遵循类似的逻辑,全面概括如下。Joda DateTime和Java8 LocalDateTime使用fluent接口提供不可变的日期时间实现。要进入最后一周的星期一凌晨2点,您可以采取以下步骤,使用fluent接口链接后续调用:
尤达-时间
DateTime currentTime = new DateTime();
DateTime dateResult;
boolean shouldReturnLastMonday = (currentTime.getDayOfWeek() != DateTimeConstants.MONDAY ||
currentTime.hourOfDay().get() < 2);
if (shouldReturnLastMonday) {
dateResult = currentTime.minus(Days.days(currentTime.getDayOfWeek() - DateTimeConstants.MONDAY))
.minus(currentTime.getMillisOfDay())
.plus(Hours.hours(2));
} else {
dateResult = currentTime.minus(currentTime.getMillisOfDay())
.plus(Hours.hours(2));
}
System.out.println(dateResult);java.time
LocalDateTime currentTime = LocalDateTime.now();
LocalDateTime dateResult;
boolean shouldReturnLastMonday = (currentTime.getDayOfWeek() != DayOfWeek.MONDAY) ||
(currentTime.getDayOfWeek() != DayOfWeek.MONDAY && currentTime.getHour() < 2);
if(shouldReturnLastMonday) {
dateResult = currentTime.minus(currentTime.getDayOfWeek().getValue() - DayOfWeek.MONDAY.getValue(), ChronoUnit.DAYS)
.minus(currentTime.getLong(ChronoField.MILLI_OF_DAY), ChronoUnit.MILLIS)
.plus(2, ChronoUnit.HOURS);
} else {
dateResult = currentTime.minus(currentTime.getLong(ChronoField.MILLI_OF_DAY), ChronoUnit.MILLIS)
.plus(2,ChronoUnit.HOURS);
}https://stackoverflow.com/questions/33840236
复制相似问题