有没有一个好方法来获得即将到来的星期三的日期?
有没有一个好方法来获得即将到来的星期三的日期? 也就是说,如果今天是星期二,我想在本周获得星期三的日期; 如果今天是星期三,我想得到下周三的日期; 如果今天是星期四,我想在接下来的一周得到星期三的日期。
谢谢。
基本算法如下:
- 获取当前日期
- 得到它的一周
- 找出它与周三的区别
- 如果差异不是正数,则添加7(即坚持下一个即将来临/未来的日期)
- 添加差异
这是一个片段,展示如何使用java.util.Calendar
执行此操作:
import java.util.Calendar; public class NextWednesday { public static Calendar nextDayOfWeek(int dow) { Calendar date = Calendar.getInstance(); int diff = dow - date.get(Calendar.DAY_OF_WEEK); if (diff <= 0) { diff += 7; } date.add(Calendar.DAY_OF_MONTH, diff); return date; } public static void main(String[] args) { System.out.printf( "%ta, %
相对于我此处和现在,上述片段的输出是"Wed, Aug 18, 2010"
。
API链接
-
java.util.Calendar
-
java.util.Formatter
- 用于格式化字符串语法
使用Java8日期时API,您可以轻松找到即将到来的星期三。
LocalDate nextWed = LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY));
next(DayOfWeek dayOfWeek) – 返回下一个星期调整器,它将日期调整为调整日期后指定星期几的第一次出现。
假设如果你想在上周三之后获得,
LocalDate prevWed = LocalDate.now().with(TemporalAdjusters.previous(DayOfWeek.WEDNESDAY));
previous(DayOfWeek dayOfWeek) – 返回上一个星期几调整器,它将日期调整为调整日期之前指定星期几的第一次出现。
假设如果你想获得下一个或当前的星期三那么
LocalDate nextOrSameWed = LocalDate.now().with(TemporalAdjusters.nextOrSame(DayOfWeek.WEDNESDAY));
nextOrSame(DayOfWeek dayOfWeek) – 返回下一个或相同的星期几调整器,它将日期调整为调整日期后指定星期几的第一次出现,除非它已在当天case返回相同的对象。
编辑:您还可以通过ZoneId从指定时区的系统时钟获取当前日期。
ZoneId zoneId = ZoneId.of("UTC"); LocalDate nextWed = LocalDate.now(zoneId).with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY));
有关更多信息,请参阅TemporalAdjusters
使用java.util.Calendar。 你得到这样的当前日期/时间:
Calendar date = Calendar.getInstance();
从那里,获取date.get(Calendar.DAY_OF_WEEK)
以获取当周的当天,并获得与Calendar.WEDNESDAY
的差异并添加它。
使用JodaTime:
LocalDate date = new LocalDate(System.currentTimeMillis()); Period period = Period.fieldDifference(date, date.withDayOfWeek(DateTimeConstants.WEDNESDAY)); int days = period.getDays(); if (days < 1) { days = days + 7; } System.out.println(date.plusDays(days));
Calendar c= Calendar.getInstance(); c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); c.add(Calendar.DAY_OF_MONTH, 7); c.getTime();