Можно ли найти номер дня, передав название дня в Java? - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь узнать номер дня, например, 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, в некоторых случаях эта логика также дает сбой, например, если у системы начальный день отличается от нашей функции enum.

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

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Мой первый пример - Франция.Франция использует международный стандарт (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 иногда немного сложен в использовании, но если вы можете узнать, как его использовать, он почти всегда может дать вам то, что вы хотите по международным, американским и другим недельным схемам.

0 голосов
/ 08 июня 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;
        }
    }
...