Я String
представляю дату.
String date_s = "2011-01-18 00:00:00.0";
Я хотел бы преобразовать его в Date
и вывести в YYYY-MM-DD
формате.
2011-01-18
Как мне этого добиться?
Хорошо, основываясь на ответах, которые я получил ниже, вот что я попробовал:
String date_s = " 2011-01-18 00:00:00.0";
SimpleDateFormat dt = new SimpleDateFormat("yyyyy-mm-dd hh:mm:ss");
Date date = dt.parse(date_s);
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
System.out.println(dt1.format(date));
Но это выводит 02011-00-1
вместо желаемого 2011-01-18
. Что я делаю неправильно?
java
string
date
formatting
date-format
amit4444
источник
источник
Ответы:
Используйте
LocalDateTime#parse()
(или,ZonedDateTime#parse()
если строка содержит часть часового пояса), чтобы проанализироватьString
определенный шаблон вLocalDateTime
.использование
LocalDateTime#format()
(илиZonedDateTime#format()
) для формированияLocalDateTime
вString
в определенном порядке.Или , когда вы еще не работаете в Java 8, используйте
SimpleDateFormat#parse()
для анализа aString
по определенному шаблону вDate
.Используйте
SimpleDateFormat#format()
для форматирования картыDate
вString
в определенном порядке.Смотрите также:
Обновление : согласно вашей неудачной попытке: шаблоны чувствительны к регистру . Прочитайте
java.text.SimpleDateFormat
Javadoc, что означает отдельные части. Так стоит напримерM
месяцами иm
минутами. Кроме того, годы существуют из четырех цифрyyyy
, а не пятиyyyyy
. Посмотрите ближе на фрагменты кода, которые я разместил здесь выше.источник
Форматирование является CASE-SENSITIVE, поэтому используйте MM для месяца, а не мм (это для минуты) и yyyy. Для справки вы можете использовать следующую таблицу.
Примеры:
источник
Ответ, конечно же, состоит в том, чтобы создать объект SimpleDateFormat и использовать его для разбора строк на дату и для форматирования дат в строки. Если вы пробовали SimpleDateFormat и он не работал, то, пожалуйста, покажите свой код и любые ошибки, которые вы можете получить.
Приложение: "mm" в формате String не совпадает с "MM". Используйте ММ для месяцев и мм для минут. Кроме того, ггггг не совпадает с гггг. например,:
источник
hh
даст вам час в диапазоне 1-12, вам нужно будет использоватьa
в дополнение к печати / разбораAM
илиPM
. Чтобы напечатать / проанализировать час в диапазоне 0-23, используйтеHH
.Почему бы просто не использовать это
Кроме того, это другой способ:
или
Ура!
источник
Используя
java.time
пакет в Java 8 и позже:источник
[отредактировано, чтобы включить исправления BalusC] Класс SimpleDateFormat должен сделать свое дело :
источник
DD
означает «день в году», а не «день в месяце».hh
означает «час в час / час (1-12)», а не «час в день (0-23)».Другие ответы верны, в основном вы указали неверное количество символов «у» в вашем шаблоне.
Часовой пояс
Еще одна проблема ... Вы не обращались к часовым поясам. Если вы намеревались использовать UTC , значит, вы должны были это сказать. Если нет, ответы не являются полными. Если вам нужна только часть даты без времени, то нет проблем. Но если вы выполняете дальнейшую работу, которая может потребовать времени, вам следует указать часовой пояс.
Joda времени
Вот такой же код, но с использованием сторонней библиотеки с открытым исходным кодом Joda-Time 2.3
Когда беги…
источник
Пожалуйста, обратитесь к «Шаблонам даты и времени» здесь. http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
источник
источник
источник
источник
Вы можете просто использовать:
Работает отлично!
источник
Вы также можете использовать substring ()
Если вы хотите пробел перед датой, используйте
источник
Вы можете попробовать Java 8 новой
date
, более подробную информацию можно найти в документации Oracle .Или вы можете попробовать старый
источник
источник
удалить одну форму у
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
должно бытьSimpleDateFormat dt1 = new SimpleDateFormat("yyyy-mm-dd");
источник
DateTimeFormatter
или цепляетесь за устаревшийSimpleDateFormat
).SimpleDateFormat dt1 = new SimpleDateFormat ("гггг-мм-дд");
источник
DateTimeFormatter
аDateTimeFormatterBuilder
. ПредлагатьSimpleDateFormat
в 2019 году плохой совет.hh
на час.Допустим, вы хотите изменить 2019-12-20 10:50 утра по Гринвичу + 6: 00 до 2019-12-20 10:50 утра. Прежде всего вам необходимо понять формат даты. Первый формат даты: гггг-мм-дд чч : mm a zzz и второй формат даты будет: гггг-мм-дд чч: мм а
просто вернуть строку из этой функции, как.
Эта функция вернет ваше желание ответить. Если вы хотите настроить больше, просто добавьте или удалите компонент из формата даты.
источник