如何通过给出月份中的星期几和星期几来获得日期。
示例:如果我需要2018年11月的第三个星期二。
每月的第3周: 星期几:3
预计日期是:2018年11月20日
但是我们得到的价值是:2018年11月13日。由于该月的开始日期(星期四)小于预期的日期(星期二)。
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,2018 );
calendar.set(Calendar.MONTH, 10);
calendar.set(Calendar.WEEK_OF_MONTH, 3);
calendar.set(Calendar.DAY_OF_WEEK, 3);
System.out.println("Time " + calendar.getTime());
我如何获得正确的日期?
答案 0 :(得分:3)
如果您使用的是Java 8,则可以这样做,
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
public class Main {
public static void main(String[] args) {
LocalDate input = LocalDate.now();
int ordinal = 3;
DayOfWeek weekday = DayOfWeek.THURSDAY;
TemporalAdjuster ta = TemporalAdjusters.dayOfWeekInMonth(ordinal, weekday) ;
LocalDate adjusted = input.with( ta );
System.out.println(adjusted.toString());
}
}
我从here那里获得了它,并且在给定的链接中还有更多的方法可以实现这一点。
答案 1 :(得分:2)
您可以使用以下代码:
LocalDate.now().with(TemporalAdjusters.dayOfWeekInMonth(3, DayOfWeek.TUESDAY));
这将输出:
2018-11-20
更多信息可以在Java文档here
中找到答案 2 :(得分:2)
如果要使用日历,则:
int year = 2018;
int month = 10; // zero based November
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
calendar.set(Calendar.DAY_OF_WEEK_IN_MONTH, 3);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.YEAR, year);
System.out.println(calendar.getTime());