Как получить дату, указав неделю месяца и день недели - PullRequest
0 голосов
/ 21 ноября 2018

Как получить дату, указав неделю месяца и день недели.

Пример: если мне нужен третий вторник ноября 2018 года.

Неделя месяца: 3, День недели: 3

Ожидаемая дата: 20 ноября 2018

Но мы получаем следующее значение: 13 ноября 2018. Так как день начала месяца (четверг) меньше, чем ожидаемый день (вторник).

   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 голосов
/ 21 ноября 2018

Вы можете использовать следующий код:

LocalDate.now().with(TemporalAdjusters.dayOfWeekInMonth(3, DayOfWeek.TUESDAY));

Это выдаст:

2018-11-20

Более подробная информация может бытьнаходится в документации по Java здесь

0 голосов
/ 21 ноября 2018

Если вы хотите использовать Календарь, то:

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());
0 голосов
/ 21 ноября 2018

Если вы используете 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());
    }

}

Я взял это из здесь , и есть другие способы сделать это по данной ссылке.

...