Вам следовало немного поискать перед публикацией. На StackOverflow.com уже есть много таких вопросов и ответов.
Но для потомков, вот пример кода с использованием библиотеки Joda-Time 2.3. Избегайте классов java.util.Date/Calendar, связанных с Java, поскольку они плохо спроектированы и реализованы. В Java 8 продолжайте использовать Joda-Time или переключитесь на новый java.time. * классы, определенные JSR 310: API даты и времени. Эти новые классы были вдохновлены Joda-Time, но полностью переработаны.
Joda-Time имеет множество функций, направленных на форматирование вывода. Joda-Time предлагает встроенные стандартные (ISO 8601) форматы. Некоторые классы отображают строки с форматом и языком, соответствующими языку главного компьютера, или вы можете указать языковой стандарт. И Joda-Time также позволяет вам определять свои собственные фанковые форматы. Поиск по запросу "joda" + "format" даст вам множество примеров.
// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;
String input = "05/27/2014" + " " + "23:01";
Разобрать эту строку…
// Assuming that string is for UTC/GMT, pass the built-in constant "DateTimeZone.UTC".
// If that string was stored as-is for a specific time zone (NOT a good idea), pass an appropriate DateTimeZone instance.
DateTimeFormatter formatterInput = DateTimeFormat.forPattern( "MM/dd/yyyy HH:mm" ).withZone( DateTimeZone.UTC );
DateTime dateTime = formatterInput.parseDateTime( input );
В идеале вы должны хранить значения в соответствующем формате даты и времени в базе данных. Если это невозможно, сохраните как строку в формате ISO 8601, задав значение UTC / GMT (без смещения часового пояса).
// Usually best to write out date-times in ISO 8601 format in the UTC time zone (no time zone offset, 'Z' = Zulu).
String saveThisStringToStorage = dateTime.toDateTime( DateTimeZone.UTC ).toString(); // Convert to UTC if not already in UTC.
Делайте свою бизнес-логику и хранилище в UTC в целом. Переключайтесь на местные часовые пояса и локализованное форматирование только в части пользовательского интерфейса вашего приложения.
// Convert to a localized format (string) only as needed in the user-interface, using the user's time zone.
DateTimeFormatter formatterOutput = DateTimeFormat.mediumDateTime().withLocale( Locale.US ).withZone( DateTimeZone.forID( "America/New_York" ) );
String showUserThisString = formatterOutput.print( dateTime );
Выгрузить в консоль…
System.out.println( "input: " + input );
System.out.println( "dateTime: " + dateTime );
System.out.println( "saveThisStringToStorage: " + saveThisStringToStorage );
System.out.println( "showUserThisString: " + showUserThisString );
При запуске…
input: 05/27/2014 23:01
dateTime: 2014-05-27T23:01:00.000Z
saveThisStringToStorage: 2014-05-27T23:01:00.000Z
showUserThisString: May 27, 2014 7:01:00 PM
person
Basil Bourque
schedule
01.01.2014