Дата календаря в формате yyyy-MM-dd в 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
. Моя цель - сравнить эту дату с другой датой в моей базе данных с использованием критериев Hibernate. Поэтому мне нужен объект даты в формате yyyy-MM-dd
.
Ответы
Ответ 1
Java Date
- это контейнер для количества миллисекунд с 1 января 1970 года, 00:00:00 по Гринвичу.
Когда вы используете что-то вроде System.out.println(date)
, Java использует Date.toString()
для печати содержимого.
Единственный способ изменить это - переопределить Date
и предоставить собственную реализацию Date.toString()
. Теперь, прежде чем вы запустите свою среду IDE и попробуете это, я не буду; это только усложнит ситуацию. Вам лучше форматировать дату в формате, который вы хотите использовать (или отображать).
Что вы можете сделать, это формат даты.
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.
Вы можете отформатировать объект даты календаря, когда хотите отобразить его, и сохранить его как строку.
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), а France на один час вперед. Итак, момент в новый день в Индии имеет одну дату, а тот же момент во Франции имеет дату "вчера". Создание строкового вывода без какой-либо временной зоны или информации о смещении создает двусмысленность. Вы просили вывести YYYY-MM-DD, поэтому я предоставил, но я не рекомендую его. Вместо 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);
Ответ 5
Чтобы разобрать объект java.util.Date
, вы должны сначала преобразовать его в String, используя свой собственный формат.
inActiveDate = format1.parse( format1.format(date) );
Но я считаю, что вы здесь лишние.
Ответ 6
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 7);
Date date = c.getTime();
SimpleDateFormat ft = new SimpleDateFormat("MM-dd-YYYY");
JOptionPane.showMessageDialog(null, ft.format(date));
Это отобразит вашу дату + 7 дней в месяц, день и год в окне окна JOption.
Ответ 7
Я нашел этот код, где дата сравнивается в формате для сравнения с полем даты в базе данных... может быть, это может быть полезно для вас...
Когда вы конвертируете строку в дату с помощью simpleedformformat, ее трудно сравнивать с полем Date в базах данных mysql.
Итак, преобразуем дату строки java в формате, используя в этом формате STR_to_DATE ('yourdate', '% m/% d/% Y') → , тогда вы получите точный формат даты в поле даты mysql.
http://javainfinite.com/java/java-convert-string-to-date-and-compare/
Ответ 8
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
cal.set(year, month, date);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy MM dd");
String formatted = format1.format(cal.getTime());
System.out.println(formatted);
}