java изменить формат даты

Мне нужно изменить формат даты с помощью Java из

Как конвертировать из одного формата даты в другой с помощью SimpleDateFormat:

Это должно сделать трюк

ТЛ; др

Избегайте устаревших классов времени

Ответ Кристофера Паркера правильный, но устаревший. Неудобные старые классы времени, такие как java.util.Date , java.util.Calendar и java.text.SimpleTextFormat , теперь являются устаревшими, вытесняются классами java.time.

Использование java.time

Разберите входную строку как объект даты, затем сгенерируйте новый объект String в нужном формате.

Класс LocalDate представляет значение даты только без времени и без часового пояса.

Определите другой форматтер для вывода.

Кстати, рассмотрим использование стандартных форматов ISO 8601 для строк, представляющих значения даты и времени.

О java.time

Рамка java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют неприятные старые устаревшие классы времени, такие как java.util.Date , Calendar и SimpleDateFormat .

Проект Joda-Time, теперь в режиме обслуживания, советует перейти на классы java.time.

Чтобы узнать больше, ознакомьтесь с учебным пособием Oracle. И поиск Qaru для многих примеров и объяснений. Спецификация — JSR 310.

Где можно получить классы java.time?

  • Java SE 8 , Java SE 9 и более поздние версии
    • Встроенный.
    • Часть стандартного Java API с интегрированной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональных возможностей java.time включена обратно в Java 6 и 7 в ThreeTen-Backport .
  • Android
    • Проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше) специально для Android.
    • См. Раздел Как использовать ThreeTenABP.

Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval , YearWeek , YearQuarter и другие.

Joda времени

UPDATE: проект Joda-Time теперь находится в режиме обслуживания, а команда советует перейти на классы java.time. Этот раздел здесь оставлен ради истории.

Для удовольствия, вот его код, адаптированный для использования библиотеки Joda-Time.

У меня есть String , представляющий дату.

Я хотел бы преобразовать его в Date и вывести его в формате YYYY-MM-DD .

Как я могу это достичь?

Хорошо, основываясь на ответах, которые я получил ниже, вот что я пробовал:

Но он выводит 02011-00-1 вместо желаемого 2011-01-18 . Что я делаю неправильно?

Используйте LocalDateTime#parse() (или ZonedDateTime#parse() если строка содержит часть часового пояса), чтобы проанализировать String в определенном шаблоне в LocalDateTime .

Используйте LocalDateTime#format() (или ZonedDateTime#format() ) для форматирования a LocalDateTime в String в определенном шаблоне.

Или, если вы еще не на Java 8, используйте SimpleDateFormat#parse() для синтаксического анализа String в определенном шаблоне в Date .

Используйте SimpleDateFormat#format() для форматирования Date в String в определенном шаблоне.

В Java имеется удобный класс SimpleDateFormat, который можно использовать для форматирования даты. В этой статье Вы найдете обзор парметров, принимаемых методами класса SimpleDateFormat, а также будут приведены результаты выполнения метода format с разнообразными параметрами.

Приведем простой пример форматирования даты с использованием класса SimpleDateFormat:

Если на компьютере локализацией по умолчанию является русская локализация, то в результате выполнения приведенного кода Вы увидите следующее:

Рассмотрим некоторые методы класса SimpleDateFormat. Для начала, у класса есть 4 конструктора:

Следующий пример демонстрирует работу всех четырех конструкторов:

Результатом выполнения этого кода будут следующие четыре строки:

Конструктор по умолчанию использует паттерн времени и формат символов по умолчанию для текущей локализации. То есть, для русской локализации стандартным паттерном времени является паттерн «dd.MM.yy HH:mm».

Конструктор SimpleDateFormat(String pattern) принимает паттерн даты, в котором будет отдавать результат метод format(). В примере мы использовали паттерн «dd MMMM», который требует от format() вывести дату в следующем формате: «две цифры дня месяца» + «пробел» + «название месяца». В данном случае используется название месяца по умолчанию для текущей локализации, т.е., «Февраль».

Конструктор SimpleDateFormat(«dd MMMM», myDateFormatSymbols ) аналогичен предыдущему за исключением того, что название месяца используется не по умолчанию, а те, которые возвращает переменная myDateFormatSymbols. В свою очередь, в переменной myDateFormatSymbols мы переопределили метод getMonths() чтобы он возвращал названия месяцев с прописной буквы и в родительном падеже.

Конструктор SimpleDateFormat(«dd MMMM», Locale.ENGLISH) аналогичен конструктору SimpleDateFormat(String pattern), но использует заданную локализацию. В нашем случае это английская локализация Locale.ENGLISH.

Рассмотрим подробно параметры, принимаемые классом SimpleDateFormat в качестве паттерна даты.

Символ Что означает Пример
G эра (в английской локализации — AD и BC) н.э.
y год (4-х значное число) 2012
yy год (последние 2 цифры) 12
yyyy год (4-х значное число) 2012
M номер месяца без лидирующих нулей 2
MM номер месяца (с лидирующими нулями если номер месяца MMM четырех буквенное сокращение месяца в русской локализации и трех буквенное — в английской (Feb) фев
MMMM полное название месяца (в английской локализации — February) Февраль
w неделя в году без лидирующих нулей 7
ww неделя в году с лидирующими нулями 07
W неделя в месяце без лидирующих нулей 2
WW неделя в месяце с лидирующим нулем (если это необходимо) 02
D день в году 38
d день месяца без лидирующих нулей 7
dd день месяца с лидирующими нулями 07
F день недели в месяце без лидирующих нулей 1
FF день недели в месяце с лидирующими нулями 01
E день недели (сокращение) Вт
EEEE день недели (полностью) вторник
a AM/PM указатель AM
H часы в 24-часовом формате без лидирующих нулей 6
HH часы в 24-часовом формате с лидирующим нулем 06
k количество часов в 24-часовом формате 18
K количество часов в 12-часовом формате 6
h время в 12-часовом формате без лидирующих нулей 6
hh время в 12-часовом формате с лидирующим нулем 06
m минуты без лидирующих нулей 32
mm минуты с лидирующим нулем 32
s секунды без лидирующих нулей 11
ss секунды с лидирующим нулем 11
S миллисекунды 109
z часовой пояс EET
Z часовой пояс в формате RFC 822 +0200
символ экранирования для текста ‘Date=’
» кавычка ‘o»clock’

Рассмотрим несколько примеров паттернов даты и времени, которые представлены в официальной документации. Русская локализация:

Оцените статью