如何通过给出星期几和星期几来获取日期

时间:2018-11-21 10:54:36

标签: java date calendar dayofweek week-number

如何通过给出月份中的星期几和星期几来获得日期。

示例:如果我需要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());

我如何获得正确的日期?

3 个答案:

答案 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());