Получить день месяца - PullRequest
       15

Получить день месяца

0 голосов
/ 31 октября 2019

Я понимаю, что пакет java.time, представленный в Java 8, намного проще в использовании. Тем не менее, я делаю вызов в Java 7 и когда я запускаю свой код, и я ломаю голову над тем, в чем заключается ошибка. Я пытаюсь напечатать День недели (в тексте) в последней строке. Тем не менее, он печатает ноль в последней печати. Если я поменяю месяц с 7 на 8, в последнем отчете будет напечатана суббота. Хотите знать, что я делаю не так.

Вывод с параметром месяца для нового GregorianCalendar как 7

Ср 05 августа 00:00:00 AEST 2015

4

null

Вывод с параметром месяца для нового GregorianCalendar как 8

Сб 05 сентября 00:00:00 AEST 2015

7

Суббота

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;

public class Test {


    public static void main(String[] args){
        Calendar calendar  = new GregorianCalendar(2015,7,5);
        System.out.println(calendar.getTime().toString());

        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));


        System.out.println(calendar.getDisplayName(calendar.get(Calendar.DAY_OF_WEEK),Calendar.LONG, Locale.getDefault()));


    }
}

1 Ответ

1 голос
/ 31 октября 2019

Вы правы, что не следует использовать GregorianCalendar в 2019. Также не в Java 7. java.time, современный Java-интерфейс даты и времени, был портирован. Используйте ThreeTen Backport. См. Ссылки внизу.

    LocalDate date = LocalDate.of(2019, Month.AUGUST, 5);
    DayOfWeek dow = date.getDayOfWeek();
    System.out.println(dow.getDisplayName(TextStyle.SHORT, Locale.ENGLISH));

Вывод:

Пн

Что пошло не так в вашем коде?

Вы хотели:

    System.out.println(calendar.getDisplayName(Calendar.DAY_OF_WEEK,Calendar.LONG, Locale.getDefault()));

Первый аргумент getDisplayName - это код поля наподобие DAY_OF_WEEK. Вместо этого, передавая фактическое значение этого поля, вы рискуете присвоить ему недопустимое значение, и в этом случае метод возвращает null (что может сбивать с толку - спасибо Кевину Андерссону за признание этого как занижениегод (; ->)!).

Поле 4 равно WEEK_OF_MONTH. Недели месяца не имеют имен, только цифры, поэтому строковое представление для этого поля не применимо. Поле 7 равно DAY_OF_WEEK, поэтому ожидаемый результат во втором случае (8 = сентябрь) был простым совпадением.

Ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...