【发布时间】:2011-06-13 04:59:18
【问题描述】:
在Joda-Time,有没有办法获取一周中第一天(星期一)的日期。
例如,我想根据今天的当前日期 21/01/11 找出本周星期一的日期
提前干杯。
编辑:我还希望找到一周结束的日期,即星期天的日期。干杯
【问题讨论】:
在Joda-Time,有没有办法获取一周中第一天(星期一)的日期。
例如,我想根据今天的当前日期 21/01/11 找出本周星期一的日期
提前干杯。
编辑:我还希望找到一周结束的日期,即星期天的日期。干杯
【问题讨论】:
LocalDate now = new LocalDate();
System.out.println(now.withDayOfWeek(DateTimeConstants.MONDAY)); //prints 2011-01-17
System.out.println(now.withDayOfWeek(DateTimeConstants.SUNDAY)); //prints 2011-01-23
【讨论】:
isBefore/isAfter 和minusWeeks/plusWeeks 获取过去/未来的值。
LocalDate today = new LocalDate();
LocalDate weekStart = today.dayOfWeek().withMinimumValue();
LocalDate weekEnd = today.dayOfWeek().withMaximumValue();
会给你第一天和最后一天,即周一和周日
【讨论】:
另一种选择是使用roundFloorCopy。如下所示:
LocalDate startOfWeek = new LocalDate().weekOfWeekyear().roundFloorCopy();
对于the standard week(星期日)的最后一天,请使用roundCeilingCopy 和minusDays...
LocalDate lastDateOfWeek = new LocalDate().weekOfWeekyear().roundCeilingCopy().minusDays( 1 );
也适用于日期时间。并且适用于周末(独家)。
DateTime dateTime = new DateTime();
DateTime startOfWeek = dateTime.weekOfWeekyear().roundFloorCopy();
DateTime endOfWeek = dateTime.weekOfWeekyear().roundCeilingCopy();
转储到控制台...
System.out.println( "dateTime " + dateTime );
System.out.println( "startOfWeek " + startOfWeek );
System.out.println( "endOfWeek " + endOfWeek );
运行时……
dateTime 2014-01-24T00:00:34.955-08:00
startOfWeek 2014-01-20T00:00:00.000-08:00
endOfWeek 2014-01-27T00:00:00.000-08:00
【讨论】:
LocalDate startOfWeek = new LocalDate().dayOfWeek().roundFloorCopy(); 或LocalDate endOfWeek = new LocalDate().dayOfWeek().roundCeilingCopy(); 时,两种情况下我都会得到今天的日期(今天是星期四)。我正在使用 Joda-Time 2.3 和 Java 8 beta 123。
dayOfWeek 是错误的字段。使用weekOfWeekyear,它可以正常工作。
LocalDate 是否有原因?
您可以使用 getDayOfWeek() 方法返回 1 代表星期一,2 代表星期二,..,7 代表星期日,以便返回那么多天并到达星期一:
import org.joda.time.DateTime;
public class JodaTest {
public static void main(String[] args) {
DateTime date = new DateTime();
System.out.println(date);
//2011-01-21T15:06:18.713Z
System.out.println(date.minusDays(date.getDayOfWeek()-1));
//2011-01-17T15:06:18.713Z
}
}
【讨论】:
参见"Querying DateTimes" of the Joda-Time user guide部分。
这是我要遵循的一般算法:
dateTime.minusDays(n)从目标日期中减去#2的值
【讨论】: