Можно ли найти номер дня, передав имя дня в java?

Я пытаюсь узнать номер дня, например, 1, 2 или 3, передав название дня, например Понедельник или Вторник, потому что номер дня может меняться в зависимости от системного календаря (некоторые календари начинаются с воскресенья). день в какой-то понедельник).

Мне нужно узнать даты понедельника, пятницы или воскресенья, передав индекс этих дней и номер недели.

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

Подскажите пожалуйста, можно или нет?

import java.time.LocalDateTime;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
public class HelloWorld{

     public static void main(String []args){

         String str = "2018-06-08 12:34:21";
         int sDate, eDate;
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 
         LocalDateTime assignedDateTime = LocalDateTime.parse(str, formatter);
         //LocalDate assignedDate = assignedDateTime.toLocalDate();
          Instant instant = assignedDateTime.atZone(ZoneId.systemDefault()).toInstant();
          Date dateFromOld = Date.from(instant);

         Calendar calendar = new GregorianCalendar();
         calendar.setTime(dateFromOld);  

        int weekNumber = calendar.get(calendar.WEEK_OF_MONTH);
         int dayofWeek = calendar.get(Calendar.DAY_OF_WEEK);
        System.out.println(assignedDateTime);
        System.out.println(dateFromOld);
        System.out.println(weekNumber);
        System.out.println(dayofWeek);
     }
}

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

Но я хочу узнать номер дня по имени дня, и я не нашел для этого никаких методов. Есть некоторая логика, чтобы выяснить это, например, написание функций Enum, но эта логика также терпит неудачу в некоторых случаях, например, если система имеет другой день начала от нашей функции перечисления.

Надеюсь теперь понятно.


person Barathi Suwin    schedule 08.06.2018    source источник
comment
Похоже, у вас уже есть код, который что-то делает, но в вашем вопросе его нет. Можете ли вы опубликовать код, чтобы показать контекст вашего вопроса?   -  person khelwood    schedule 08.06.2018
comment
Загляните в java.util.Calendar. класс   -  person John Bollinger    schedule 08.06.2018
comment
Возможный дубликат Как определить день недели, передав конкретный дата?   -  person anothernode    schedule 08.06.2018
comment
Это определенно возможно   -  person soufrk    schedule 08.06.2018
comment
Пожалуйста, предоставьте некоторые рекомендации для этого @soufrk.   -  person Barathi Suwin    schedule 08.06.2018
comment
Поскольку вы можете использовать java.time, современный API даты и времени Java, нет причин, по которым вы должны также использовать какие-либо старые и устаревшие классы, такие как Date и Calendar. Современный API предлагает все функции, о которых вы только можете мечтать. Так что нет, @JohnBollinger, я категорически не согласен с изучением java.util.Calendar.   -  person Ole V.V.    schedule 08.06.2018


Ответы (2)


Мой первый пример — Франция. Франция использует международный стандарт (ISO), где понедельник — 1-й день недели, вторник — 2-й и т. д. Чтобы найти число, нам сначала нужно разобрать название дня недели. Затем соответствующий объект WeekFields может дать нам поле, которое мы можем использовать для запроса дня недели о его номере в неделе.

    DateTimeFormatter dayOfWeekFormatter
            = DateTimeFormatter.ofPattern("EEEE", Locale.ENGLISH);

    Locale loc = Locale.FRANCE;
    WeekFields wf = WeekFields.of(loc);

    String dayName = "Tuesday";
    DayOfWeek day = DayOfWeek.from(dayOfWeekFormatter.parse(dayName));
    int dayNumber = day.get(wf.dayOfWeek());
    System.out.println(dayName + " has number " + dayNumber);

Вывод:

Вторник имеет номер 2

Это было ожидаемо. Другой пример – США. Американские недели начинаются в воскресенье, поэтому вторник должен быть 3-м днем ​​недели. Мы используем локаль США:

    Locale loc = Locale.US;

Остальная часть моего кода такая же, но теперь вывод:

Вторник имеет номер 3

Класс WeekFields иногда немного сложен в использовании, но если вы узнаете, как его использовать, он почти всегда может дать вам то, что вы хотите, в международных, американских и других недельных схемах.

person Ole V.V.    schedule 08.06.2018

Календарная неделя может начинаться не с воскресенья, но постоянные значения для дней недели останутся прежними (воскресенье = 1, понедельник = 2 ...). Вы можете использовать приведенный ниже код, чтобы просмотреть все дни недели и сравнить

    String inputDayName = "Thursday";
    int dayId=0;

    for(int i=0; i<7; i++)
    {
        calendar.add(Calendar.DATE, 1);
        String iteratingDayName = calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault());
        if(iteratingDayName.equalsIgnoreCase(inputDayName))
        {
            dayId=calendar.get(Calendar.DAY_OF_WEEK);
            break;
        }
    }
person Sai Prasad    schedule 08.06.2018
comment
Много лет назад проблемный старый класс Calendar был вытеснен классами java.time. Этот ответ - плохой совет в 2018 году. - person Basil Bourque; 09.06.2018