Мне нужно изменить формат даты с помощью 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’ |
Рассмотрим несколько примеров паттернов даты и времени, которые представлены в официальной документации. Русская локализация: