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-Time
Аналогічний код за допомогою бібліотеки 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)