java.time
Ответ на MadProgrammer правильно, особенно кончик о Joda-времени . Преемник Joda-Time теперь встроен в Java 8 как новый пакет java.time . Вот пример кода в Java 8.
При работе с датой-временем (в отличие от локальной даты) часовой пояс критический. День месяца зависит от часового пояса. Например, часовой пояс Индия является +05:30
(пять с половиной часов больше , чем UTC), в то время как Франция только один час вперед. Таким образом, у момента в новом дне в Индии одна дата, а у того же момента во Франции - «вчерашняя» дата. Создание строкового вывода без какой-либо информации о часовом поясе или смещении создает двусмысленность. Вы просили вывод 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 при разборе и генерации строковых представлений различных значений даты и времени.
Date
чтобыyyyy-MM-dd
или разобрать строку сyyyy-MM-dd
доDate
значения ?? Чтобы отформатировать дату, просто используйтеformat1.format(date)
, чтобы разобрать ее, используйтеformat1.parse(someStringValueInTheCorrectFormat)