Вопрос-ответ

Calendar date to yyyy-MM-dd format in java

Перевод календарной даты в формат гггг-ММ-дд в Java

Как преобразовать календарную дату в yyyy-MM-dd формат.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String date1 = format1.format(date);
Date inActiveDate = null;
try {
inActiveDate = format1.parse(date1);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

Это приведет к inActiveDate = Wed Sep 26 00:00:00 IST 2012. Но то, что мне нужно, это 2012-09-26. Моя цель - сравнить эту дату с другой датой в моей базе данных, используя критерии гибернации. Итак, мне нужен объект date в yyyy-MM-dd формате.

Переведено автоматически
Ответ 1

A Java Date - это контейнер для количества миллисекунд, прошедших с 1 января 1970 года, 00:00:00 GMT.

Когда вы используете что-то вроде System.out.println(date), Java использует Date.toString() для печати содержимого.

Единственный способ изменить это - переопределить Date и предоставить свою собственную реализацию Date.toString(). Теперь, прежде чем вы запустите свою IDE и попробуете это, я бы не стал; это только усложнит дело. Вам лучше отформатировать дату в формат, который вы хотите использовать (или отображать).

Java 8+

LocalDateTime ldt = LocalDateTime.now().plusDays(1);
DateTimeFormatter formmat1 = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
System.out.println(ldt);
// Output "2018-05-12T17:21:53.658"

String formatter = formmat1.format(ldt);
System.out.println(formatter);
// 2018-05-12

До Java 8

Вы должны использовать резервный порт ThreeTen

Следующее сохранено для исторических целей (как исходный ответ)

Что вы можете сделать, так это отформатировать дату.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(cal.getTime());
// Output "Wed Sep 26 14:23:28 EST 2012"

String formatted = format1.format(cal.getTime());
System.out.println(formatted);
// Output "2012-09-26"

System.out.println(format1.parse(formatted));
// Output "Wed Sep 26 00:00:00 EST 2012"

На самом деле это одна и та же дата, представленная по-разному.

Ответ 2

Ваш код неверен. Нет смысла разбирать date и сохранять это как объект Date.

Вы можете отформатировать объект calender date, когда хотите отобразить, и сохранить его в виде строки.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String inActiveDate = null;
try {
inActiveDate = format1.format(date);
System.out.println(inActiveDate );
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Ответ 3

java.time

Ответ MadProgrammer правильный, особенно совет о Joda-Time. Преемник Joda-Time теперь встроен в Java 8 как новый пакет java.time. Вот пример кода в Java 8.

При работе с датой и временем (в отличие от локальной даты), часовой пояс имеет решающее значение. День месяца зависит от часового пояса. Например, часовой пояс Индии находится +05:30 (на пять с половиной часов впереди UTC), в то время как часовой пояс Франции всего на час впереди. Таким образом, момент нового дня в Индии имеет одну дату, в то время как тот же момент во Франции имеет дату “вчера”. Создание строкового вывода без какой-либо информации о часовом поясе или смещении создает двусмысленность. Вы просили выводить данные в формате ГГГГ-ММ-ДД, поэтому я предоставил, но я не рекомендую это делать. Вместо ISO_LOCAL_DATE я бы использовал ISO_DATE для получения этого вывода: 2014-02-25+05:30

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId );

DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity.
String output = formatterOutput.format( zonedDateTime );

Дамп в консоль…

System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );

При запуске…

zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
output: 2014-02-25

Joda-Время

Аналогичный код с использованием библиотеки Joda-Time, предшественницы java.time.

DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
DateTime dateTime = DateTime.now( zone );
DateTimeFormatter formatter = ISODateTimeFormat.date();
String output = formatter.print( dateTime );

ISO 8601

Кстати, этот формат вашей входной строки является стандартным форматом, одним из нескольких удобных форматов строк даты и времени, определенных ISO 8601.

Как Joda-Time, так и java.time по умолчанию используют форматы ISO 8601 при синтаксическом анализе и генерации строковых представлений различных значений даты и времени.

Ответ 4

java.util.Date объект не может представлять дату в пользовательском формате, вместо этого вы должны использовать SimpleDateFormat.format метод, который возвращает string.

String myString=format1.format(date);
2024-02-06 16:35 java date