Преобразование строки в объект календаря в Java
Я новичок в Java, обычно работаю с PHP.
Я пытаюсь преобразовать эту строку:
Пн 14 марта 16: 02: 37 GMT 2011
в объект календаря, так что я могу легко вытащить год и месяц, как это:
String yearAndMonth = cal.get(Calendar.YEAR)+cal.get(Calendar.MONTH);
было бы неплохо разобрать его вручную? Используя метод подстроки?
любой совет поможет, спасибо!
8 ответов:
Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH); cal.setTime(sdf.parse("Mon Mar 14 16:02:37 GMT 2011"));// all doneПримечание: set
Localeсогласно вашим окружающей среде / требованию
См. Также
Ну, я думаю, что было бы плохой идеей реплицировать код, который уже присутствует в классах, таких как
SimpleDateFormat.С другой стороны, лично я бы предложил избегать
CalendarиDateполностью, если вы можете, и используя Джода Времени вместо этого, как гораздо лучше разработанный API даты и времени. Например, вы должны знать, чтоSimpleDateFormatи не потокобезопасный, поэтому вам нужны либо локальные потоки, синхронизация, либо новый экземпляр каждый раз вы его используете. Джода Парсеры и модули форматирования are потокобезопасным.
Не нужно создавать новый календарь, SimpleDateFormat уже использует календарь внизу.
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.EN_US); Date date = sdf.parse("Mon Mar 14 16:02:37 GMT 2011"));// all done Calendar cal = sdf.getCalendar();(Я пока не могу комментировать, поэтому я создал новый ответ)
tl; dr
современный подход использует java.время классы.
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.время занятий. Старые классы даты и времени, такие как
Calendarоказались плохо продуманными, запутанными и хлопотными.определение пользовательского форматирования, чтобы соответствовать вашей строке ввода.
String input = "Mon Mar 14 16:02:37 GMT 2011"; DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );разбор как a
ZonedDateTime.ZonedDateTime zdt = ZonedDateTime.parse( input , f );вас интересует год и месяц. Ява.занятия включают в себя
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 );
о Ява.время
The java.время фреймворк встроен в Java 8 и более поздние версии. Эти классы вытесняют беспокойных старых наследие классы даты и времени, такие как
java.util.Date,Calendar,&SimpleDateFormat.The Joda-Time, теперь режим обслуживания, советует миграцию на java.время.
дополнительные сведения см. В разделе элемент Oracle Tutorial. Поиск переполнения стека для многих примеров и объяснений. Спецификация является JSR 310.
где получить java.время занятий?
- Java SE 8 и SE 9 и позже
- встроенный.
- часть стандартного Java API с комплектной реализацией.
- Java 9 добавляет некоторые незначительные функции и зафиксировать.
- Java SE 6 и SE 7
- большая часть java.функциональность time обратно портирована на Java 6 & 7 в ThreeTen-Backport.
- Android
The ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательным полигоном для возможных будущих дополнений к java.время. Вы можете найти некоторые полезные классы, такие как
Interval,YearWeek,YearQuarterи больше.
SimpleDateFormatэто великолепно, просто обратите внимание, чтоHHотличается отhhпри работе с часами.HHвернется 24 часа на основе часов и чч вернется 12 часов на основе часов.например, следующее возвратит 12-часовое время:
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa");в то время как это вернется 24 часа времени:
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Да это было бы плохой практикой, чтобы разобрать его самостоятельно. Взгляните на SimpleDateFormat, это превратит строку в дату, и Вы можете установить дату в экземпляр календаря.
простой способ:
public Calendar stringToCalendar(String date, String pattern) throws ParseException { String DEFAULT_LOCALE_NAME = "pt"; String DEFAULT_COUNTRY = "BR"; Locale DEFAULT_LOCALE = new Locale(DEFAULT_LOCALE_NAME, DEFAULT_COUNTRY); SimpleDateFormat format = new SimpleDateFormat(pattern, LocaleUtils.DEFAULT_LOCALE); Date d = format.parse(date); Calendar c = getCalendar(); c.setTime(d); return c; }
разбирать время с часовым поясом,
Zв шаблоне для часового поясаString aTime = "2017-10-25T11:39:00+09:00"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault()); try { Calendar cal = Calendar.getInstance(); cal.setTime(sdf.parse(aTime)); Log.i(TAG, "time = " + cal.getTimeInMillis()); } catch (ParseException e) { e.printStackTrace(); }выход: он вернет время UTC
1508899140000если мы не устанавливаем часовой пояс, в схеме как
yyyy-MM-dd'T'HH:mm:ss.SimpleDateFormatбудет использовать часовой пояс, который установлен вSetting

Comments