2015-05-19 22 views
9

Ich speichere Datum Zeitstempel in DB als UTC-Wert, während es zurück abrufen muss ich als UTC-Zeit und muss zu bestimmten Zeitzone Wert konvertieren.Wie erhalte ich Datum Zeitstempel als UTC

heißt 2015.05.01 00: 09: 30: 00 UTC-Zeit müssen IST (Oder andere Zeitzone)

resultSet.getDate("VisitDate") 

bitte helfen auf diese konvertieren.

Antwort

1
private final static String DATEFORMAT = "yyyy-MM-dd HH:mm:ss"; 
public static String getCurrentTimeInUTC(){ 

    final SimpleDateFormat sdf = new SimpleDateFormat(DATEFORMAT); 
    sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
    final String utcTime = sdf.format(new Date()); 


    return utcTime; 

} 

U kann die UTC-Zeichenfolge in eine beliebige Zeitzonenzeichenfolge ändern, um dieses Format zu erhalten. Stimmen Sie ab, wenn dies hilfreich ist. für die Zeitzone zu ändern können Sie diese Funktion

public static String getLocalTime(String timeZone) throws ParseException{ 
    DateFormat formatter = null; 
     Date convertedDate = null; 

     DateFormat outputFormat=new SimpleDateFormat(DATEFORMAT); 
     formatter = new SimpleDateFormat(DATEFORMAT); 
     formatter.setTimeZone(TimeZone.getTimeZone(timeZone)); 
     convertedDate = (Date) formatter.parse(getCurrentTimeInUTC()); 
     return outputFormat.format(convertedDate); 
} 

Genießen Sie verwenden :-)

+0

Jetzt können Sie die zweite Funktion wie in der vorletzten Zeile verwenden Verwenden können Sie Ihr UTC-Datum für die weitere Umwandlung geben kann. –

9

Java 8

Sie einen ZonedDateTime Satz UTC verwenden können und übersetzen sie dann zu einem LocalDateTime wie etwas verwenden. ..

java.sql.Timestamp ts = resultSet.getTimestamp("VisitDate"); 
ZonedDateTime utcDateTime = ZonedDateTime.ofInstant(ts.toInstant(), ZoneId.of("UTC")); 
LocalDateTime localDateTime = utcDateTime.withZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime(); 

Offensichtlich habe ich Gebrauch ZoneId.systemDefault() im Beispiel (wandle die in Zonen aufgeteilt Datum/Zeit zu lokaler dat e/Zeit), aber man kann passieren, was Sie jemals Zone/Notwendigkeit

Joda-Time

Und in ähnlicher Weise mit Joda-Time möchten, wenn Sie mit Java nicht 8

java.sql.Timestamp ts = resultSet.getTimestamp("VisitDate"); 
LocalDateTime utcDateTime = new LocalDateTime(ts, DateTimeZone.UTC); 
DateTime hereDateTime = utcDateTime.toDateTime(DateTimeZone.getDefault()); 
+0

Eine Sache, die nicht ganz richtig ist, ist, dass sie annimmt, dass der Standardwert der Datenbank "Calendar" in UTC ist, aber das ist möglicherweise nicht der Fall. In h2 zum Beispiel ist der Standard 'Calendar'' Calendar.getInstance() ', was der Systemkalender ist. Was man tun muss ist 'ZoneId dbZoneId = ZoneId.of (" Europe/London "); Kalender dbCalendar = Calendar.getInstance (TimeZone.getTimeZone (dbZoneId)); TimeStamp ts = resultSet.getTimestamp ("VisitDate", dbCalendar); '. Dies ruft dann die Instanz "Timestamp" unter Verwendung des Kalenders ab, der zum Speichern des Felds an erster Stelle verwendet wurde. –

+0

Erklären Sie nur meinen vorherigen Kommentar. Dies kann offensichtlich werden, wenn die h2-Datenbank in einer Zone erstellt und dann auf eine Maschine in einer anderen Zone kopiert wird. Der Prozess, der die Daten erstellt hat, würde dies mit britischen 'Zeitstempeln' gespeichert haben, die Prozessablesung liest sie standardmäßig, als wären sie AU'-Zeitmarken'. –

+0

@BrettRyan Hier ist es angebracht, die Zeit in einer zentral definierten Zeitzone zu speichern: P – MadProgrammer

1

Wie Sie Aber Sie als UTC-Zeitzone sagte während lodaing in DB einstellen, wenn retriving die Zeitzone von DB zurück kann es nicht UTC wieder als DB wird nicht speichern Zeitzone Informationen für mehr Details Kasse Link Dealing with Timezones in DB

so nach, dass es vielleicht ret Geben Sie die Zeitzone Ihrer lokalen JVM- oder DB-Server-Zeitzoneneinstellungen ein.

Wie dem auch sei, die Zeitzone ändern, wie in anderen Antwort erwähnt Sie SimpleDateFormat

final SimpleDateFormat sdf = new SimpleDateFormat(DATEFORMAT); 
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
final String utcTime = sdf.format(new Date()); 
Verwandte Themen