Преобразование числа месяца и дня в день года с использованием КАЛЕНДАРЯ - PullRequest
0 голосов
/ 23 января 2019

У меня есть два числа.Сначала будет номер месяца.Вторым будет номер дня.

Я также знаю год.

Как я могу взять эти два числа, месяц и день и превратить их в одно число DAY_OF_YEAR?

Я использую Java 1.7 и функции календаря.

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Вы можете объединить свои детали в String и использовать SimpleDateFormatter, например:

int year = 2019;
int month = 1;
int day = 23;

String string = "" + year + "-" + month + "-" + day;
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse(string);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));

Пример для 2019 января 23 *. 1006 *

0 голосов
/ 24 января 2019

java.time через ThreeTen Backport

    int year = 2019;
    int monthNumber = 9;
    int dayNumber = 28;

    LocalDate date = LocalDate.of(year, monthNumber, dayNumber);
    int dayOfYear = date.getDayOfYear();

    System.out.println("Day of year is " + dayOfYear);

Вывод этого фрагмента:

День года 271

Протестировано на Java 1.7.0_79 с использованием ThreeTen Backport 1.3.6 и импорта org.threeten.bp.LocalDate.

Не используйте класс Calendar

Четыре строки текущего принятого ответа, создающего и устанавливающего объект Calendar, заменяются здесь только одной строкой. Для кода, использующего Calendar, характерно быть настолько многословным, чего мы не должны хотеть. Кроме того, несмотря на то, что название объекта Calendar - это больше, чем календарная дата, оно также содержит время суток, часовой пояс и многое другое, поэтому я не считаю его подходящим для текущей работы. Код, использующий Calendar, даст другой результат, если языковой стандарт по умолчанию - тайский, что больше всего удивит. Класс Calendar плохо спроектирован и давно устарел.

Вместо этого я использую LocalDate из java.time, современного Java-API даты и времени.

Вопрос: Могу ли я использовать java.time на Java 7?

Я использую Java 1.7…

java.time прекрасно работает на Java 7. Для этого требуется как минимум Java 6 .

  • В Java 8 и более поздних версиях, а также на более новых устройствах Android (начиная с уровня API 26) встроен современный API.
  • В Java 6 и 7 получите ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу).
  • На более старых версиях Android используется Android-версия ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с подпакетами.

Ссылки

0 голосов
/ 23 января 2019

Просто используя календарь и предполагая по номеру месяца, вы имеете в виду индекс с нулевым индексом, где 0 означает январь, вот пример для 13 мая 2019 года:

Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.ENGLISH);
c.set(Calendar.YEAR, 2019);
c.set(Calendar.MONTH, 4);
c.set(Calendar.DAY_OF_MONTH, 13);
System.out.println(c.get(Calendar.DAY_OF_YEAR));

Редактировать: Как указывалось в ответе Оле В.В., вы получаете объект Calendar с часовым поясом системы, если вы вызываете Calendar.getInstance (), поэтому я изменил его таким образом, чтобы вы явно указали часовой пояс и используемый языковой стандарт , Последнее важно, если вы, например, хотите получить номер недели, в которой правила различаются в разных регионах мира.

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