Трябваше да си направиш труда да потърсиш малко преди да публикуваш. 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