тл; д-р
Сучасний підхід використовує класи java.time .
YearMonth.from(
ZonedDateTime.parse(
"Mon Mar 14 16:02:37 GMT 2011" ,
DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" )
)
).toString()
2011-03
Уникайте застарілих занять з датами
Сучасний спосіб - з класами java.time. Такі старі класи, як-от Calendar
, виявились погано розробленими, заплутаними та клопітливими.
Визначте спеціальний формат, який відповідає вашому рядковому вводу.
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
Розбираємо як ZonedDateTime
.
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
Вас цікавлять рік та місяць. Класи java.time включають YearMonth
клас для цієї мети.
YearMonth ym = YearMonth.from( zdt );
Ви можете допитати номери року та місяця за потреби.
int year = ym.getYear();
int month = ym.getMonthValue();
Але toString
метод генерує рядок у стандартному форматі ISO 8601 .
String output = ym.toString();
Зберіть це все разом.
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
YearMonth ym = YearMonth.from( zdt );
int year = ym.getYear();
int month = ym.getMonthValue();
Скиньте до консолі.
System.out.println( "input: " + input );
System.out.println( "zdt: " + zdt );
System.out.println( "ym: " + ym );
вхід: пн. березня 14 16:02:37 GMT 2011
zdt: 2011-03-14T16: 02: 37Z [GMT]
ym: 2011-03
Живий код
Дивіться цей код, який працює в IdeOne.com .
Перетворення
Якщо у вас повинен бути Calendar
об'єкт, ви можете перетворити на GregorianCalendar
нові методи, додані до старих класів.
GregorianCalendar gc = GregorianCalendar.from( zdt );
Про java.time
Java.time каркас вбудований в Java 8 і пізніших версій. Ці класи витісняти неприємні старі застарілі класи дати і часу , такі як java.util.Date
, Calendar
, і SimpleDateFormat
.
Проект Joda-Time , який зараз знаходиться в режимі обслуговування , радить перейти на java.time.
Щоб дізнатися більше, дивіться навчальний посібник Oracle . І шукайте переповнення стека за багатьма прикладами та поясненнями. Специфікація - JSR 310 .
Де отримати класи java.time?
- Java SE 8 та SE 9 та новіші версії
- Вбудований.
- Частина стандартного Java API з пакетною реалізацією.
- Java 9 додає деякі незначні функції та виправлення.
- Java SE 6 і SE 7
- Android
Проект ThreeTen-Extra розширює java.time додатковими класами. Цей проект є доказом можливих майбутніх доповнень до java.time. Ви можете знайти деякі корисні класи тут , такі як Interval
, YearWeek
, YearQuarter
, і більш .