如何获取上周一 2-00 a.m.?
How to get the previous Monday 2-00 a.m.?
我在 Java 7.
我是 Joda-Time 的新手,想问一个简单的问题。如何获取上周一 2-00 a.m。日期?我的意思是:
____________________________________________________________________________
Week 1 | Week 2 |
______________________________________________________________|_____________|
MONDAY TUESDAY WENDSDAY THURSDAY FRIDAY SATURDAY SUNDAY| MONDAY ... |
2-00 a.m. | 2-00 a.m. |
______________________________________________________________|_____________|
所以,我需要 return Week 1
的星期一 2-00 a.m。
iff 当前时间介于 Week 1
的周一 2-00 a.m 之间。和 Week 2
的星期一 2-00 a.m.
。
是否有通过 Joda-Time 实现的相对简单的方法?
首先,Joda-Time 中的一个解决方案。二、新的java.time framework built into Java 8 and later, intended as the successor to Joda-Time. See Tutorial.
中的类似解决方案
以下两种解决方案都遵循类似的逻辑,综合总结如下。 Joda DateTime and Java8 LocalDateTime provide immutable datetime implementations using the fluent interface。要到达上周星期一凌晨 2 点,您可以执行以下步骤,使用流畅的界面链接后续调用:
- 使用 LocalDateTime.minus 方法减去星期几与星期一之间的差值,得到过去星期一的当前时间
- 减去今天的毫秒数以得到过去的星期一00:00am
- 使用 LocalDateTime.plus 方法增加 2 小时。
乔达时间
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);
}
我在 Java 7.
我是 Joda-Time 的新手,想问一个简单的问题。如何获取上周一 2-00 a.m。日期?我的意思是:
____________________________________________________________________________
Week 1 | Week 2 |
______________________________________________________________|_____________|
MONDAY TUESDAY WENDSDAY THURSDAY FRIDAY SATURDAY SUNDAY| MONDAY ... |
2-00 a.m. | 2-00 a.m. |
______________________________________________________________|_____________|
所以,我需要 return Week 1
的星期一 2-00 a.m。
iff 当前时间介于 Week 1
的周一 2-00 a.m 之间。和 Week 2
的星期一 2-00 a.m.
。
是否有通过 Joda-Time 实现的相对简单的方法?
首先,Joda-Time 中的一个解决方案。二、新的java.time framework built into Java 8 and later, intended as the successor to Joda-Time. See Tutorial.
中的类似解决方案以下两种解决方案都遵循类似的逻辑,综合总结如下。 Joda DateTime and Java8 LocalDateTime provide immutable datetime implementations using the fluent interface。要到达上周星期一凌晨 2 点,您可以执行以下步骤,使用流畅的界面链接后续调用:
- 使用 LocalDateTime.minus 方法减去星期几与星期一之间的差值,得到过去星期一的当前时间
- 减去今天的毫秒数以得到过去的星期一00:00am
- 使用 LocalDateTime.plus 方法增加 2 小时。
乔达时间
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);
}