有没有一个好方法来获得即将到来的星期三的日期? 也就是说,如果今天是星期二,我想在本周得到星期三的日期;如果今天是星期三,我想得到下周三的日期;如果今天是星期四,我希望在接下来的一周内获得星期三的日期。
感谢。
答案 0 :(得分:27)
基本算法如下:
以下是使用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, %<tb %<te, %<tY",
nextDayOfWeek(Calendar.WEDNESDAY)
);
}
}
相对于我此处和现在,上述代码段的输出为"Wed, Aug 18, 2010"
。
java.util.Calendar
java.util.Formatter
- 用于格式化字符串语法答案 1 :(得分:6)
使用Java8 Date time 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) - 返回下一天或同一天 调整器,它将日期调整为第一次出现 调整日期后指定的星期几,除非是 已经在那一天,在这种情况下返回相同的对象。
编辑: 您还可以通过ZoneId从指定时区的系统时钟获取当前日期。
ZoneId zoneId = ZoneId.of("UTC");
LocalDate nextWed = LocalDate.now(zoneId).with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY));
有关更多信息,请参阅TemporalAdjusters
答案 2 :(得分:4)
使用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));
答案 3 :(得分:3)
使用java.util.Calendar。你得到这样的当前日期/时间:
Calendar date = Calendar.getInstance();
从那里开始,获取date.get(Calendar.DAY_OF_WEEK)
以获取当周的当天,并获得与Calendar.WEDNESDAY
的差异并添加。
答案 4 :(得分:3)
Calendar c= Calendar.getInstance();
c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
c.add(Calendar.DAY_OF_MONTH, 7);
c.getTime();
答案 5 :(得分:0)
public static void nextWednesday() throws ParseException
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
int weekday = calendar.get(Calendar.DAY_OF_WEEK);
int days = Calendar.WEDNESDAY - weekday;
if (days < 0)
{
days += 7;
}
calendar.add(Calendar.DAY_OF_YEAR, days);
System.out.println(sdf.format(calendar.getTime()));
}