Я новичок в Java, обычно работаю с PHP.
Я пытаюсь преобразовать эту строку:
Пн мар 14 16:02:37 GMT 2011
В объект календаря, чтобы я мог легко вывести год и месяц следующим образом:
String yearAndMonth = cal.get(Calendar.YEAR)+cal.get(Calendar.MONTH);
Было бы плохой идеей разобрать его вручную? Используете метод подстроки?
Любой совет поможет, спасибо!
Ответы:
примечание: установить в
Locale
соответствии с вашей средой / требованиямиСмотрите также
источник
java.time
. Этот Q / A довольно заметен в Google.ТЛ; др
Современный подход использует классы java.time .
Избегайте устаревших классов даты и времени
Современный способ - с классами java.time. Старые классы даты и времени, такие как
Calendar
плохо продуманные, запутанные и хлопотные.Определите пользовательский форматер, чтобы соответствовать вашему вводу строки.
Разобрать как
ZonedDateTime
.Вы заинтересованы в году и месяце. Классы java.time включают
YearMonth
класс для этой цели.При необходимости вы можете опросить номера года и месяца.
Но
toString
метод генерирует строку в стандартном формате ISO 8601 .Положите все это вместе.
Дамп на консоль.
Живой код
Посмотрите, как работает этот код на IdeOne.com .
преобразование
Если у вас должен быть
Calendar
объект, вы можете преобразовать его,GregorianCalendar
используя новые методы, добавленные к старым классам.О java.time
Java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытеснять неприятные старые устаревшие классы даты и времени , такие как
java.util.Date
,Calendar
, иSimpleDateFormat
.Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на java.time.
Чтобы узнать больше, смотрите Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как
Interval
,YearWeek
,YearQuarter
, и более .источник
Ну, я думаю, что было бы плохой идеей копировать код, который уже присутствует в таких классах, как
SimpleDateFormat
.С другой стороны, лично я бы посоветовал избегать
Calendar
иDate
полностью, если вы можете, и использовать вместо этого Joda Time , как гораздо лучше разработанный API даты и времени. Например, вы должны знать, чтоSimpleDateFormat
это не потокобезопасно, поэтому вам понадобятся локальные потоки, синхронизация или новый экземпляр каждый раз, когда вы его используете. Парсеры и форматеры Joda являются поточно- ориентированными .источник
java.time
путь вперед, Василий Бурк дал отличный ответ.Не нужно создавать новый календарь, SimpleDateFormat уже использует календарь внизу.
(Я пока не могу комментировать, поэтому я создал новый ответ)
источник
SimpleDateFormat
отлично, просто обратите внимание, чтоHH
отличается отhh
работы с часами.HH
вернет 24-часовые часы, а чч вернет 12-часовые часы.Например, следующее вернет 12-часовое время:
Пока это вернется через 24 часа:
источник
Разобрать время с
Z
часовым поясом , в шаблоне для часового поясаВывод: вернет время UTC
Если мы не устанавливаем часовой пояс в шаблоне, как
yyyy-MM-dd'T'HH:mm:ss
.SimpleDateFormat
будет использовать часовой пояс, который установлен вSetting
источник
Да, было бы плохой практикой разбирать его самостоятельно. Взгляните на SimpleDateFormat , он превратит строку в дату, и вы можете установить дату в экземпляр календаря.
источник
Простой метод:
источник