tl;dr
LocalDate.parse (
"13136",
DateTimeFormatter.ofPattern ( "uuDDD" )
).getMonthValue()
5
…за май месяц 2013 года.
Порядковый, а не юлианский
Ваше использование слова «Юлиан» технически неверно, хотя и распространено. Люди, кажется, путают день года (1-365 или 1-366) с практикой подсчета количества дни, прошедшие с 1 января 4713 г. до н.э., используемые в некоторых научных областях.
Более понятны термины "порядковая дата" или день года.
ИСО 8601
Ваш формат порядковых дат не является стандартным. По возможности используйте стандартные форматы ISO 8601:
Java.время
Современный способ - это классы java.time, которые заменяют проблемные старые устаревшие классы даты и времени.
DateTimeFormatter
Обратите внимание, что коды шаблонов форматирования в DateTimeFormatter
a> похож на унаследованный класс, но не совсем на некоторые.
String input = "13136"; //Julian date
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "uuDDD" );
LocalDate
Класс LocalDate
представляет значение без времени суток и без часового пояса.
LocalDate localDate = LocalDate.parse ( input, f );
Дамп на консоль.
System.out.println ("localDate: " + localDate );
местнаяДата: 16 мая 2013 г.
Month
Вы можете спросить о месяце этого LocalDate
. Перечисление Month
предварительно определяет дюжину объектов, по одному на каждый месяц года. И в отличие от сумасшедших устаревших классов, эти классы разумно пронумерованы с 1 по 12 за январь-декабрь.
Если вы передаете номер месяца в своем коде, я предлагаю вам вместо этого передать эти объекты перечисления. Это обеспечивает безопасность типов, допустимые значения и самодокументирующийся код.
Month month = localDate.getMonth();
При необходимости вы можете получить локализованное название этого месяца.
String output = month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ); // Or Locale.US, Locale.ITALY, whatever.
Если вам действительно нужно число месяца от 1 до 12, спросите любым способом.
int monthNumber = month.getValue() ;
int monthNumber = localDate.getMonthValue() ;
О java.time
Платформа java.time встроен в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
и SimpleDateFormat
.
Проект Joda-Time, теперь в режим обслуживания, советует перейти на java.time.
Чтобы узнать больше, см. учебник по Oracle. И поищите множество примеров и пояснений в Stack Overflow. Спецификация: JSR 310.
Где получить классы java.time?
- Java SE 8 and SE 9 and later
- Built-in.
- Часть стандартного Java API со встроенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 and SE 7
- Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport.
- Android
Проект ThreeTen-Extra расширяет java.time дополнительными классами. . Этот проект является испытательным полигоном для возможных дополнений к java.time в будущем. Здесь вы можете найти несколько полезных классов, таких как Interval
a>, YearWeek
, YearQuarter
и подробнее.
person
Basil Bourque
schedule
20.03.2017