2016-04-28 17 views
0

Ich versuche, Zeitzone von einem vorhandenen Datum zu erhalten, um es für eine andere Datumsumwandlung zu verwenden. Kann jemand mit der Aktualisierung der Todos im folgenden Code antworten. Schätze jede Hilfe.So erhalten Sie die Zeitzone von Datum

Oder einfach nur, um es einfach ist, gibt es einige Java-API, auf die ich 0530 geben und es kehrt IST :)

Hier ist mein Code:

import java.text.SimpleDateFormat 
import java.util.*; 
import java.text.DateFormat; 

SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 
Date date = isoFormat.parse("2016-04-21T00:00:00+0530"); 

//todo print time zone 
//todo here should print IST since date is having +0530 
+0

Ich glaube, Sie bräuchten 4 'Z ist dafür. '(" yyyy-MM-dd'T'HH: mm: ssZZZZ) ' – Zircon

+1

Es ist nicht möglich: Mehrere Zeitzonen können zu einem bestimmten Zeitpunkt die gleiche Zeitverschiebung haben. – assylias

+0

Sie finden Ihre Antwort hier: http://stackoverflow.com/questions/1305350/how-to-get-the-current-date-and-time-of-your-timezone-in-java – Akah

Antwort

4

Dies ist nicht möglich. A Date enthält keine Zeitzoneninformationen. Es ist nur ein Zeitpunkt, intern dargestellt als Millisekunden seit 1.1.1970 Uhr UTC (ausgenommen Schaltsekunden).

4

Eine java.util.Date hat keine Zeitzone. Es ist eine reine Zeit in UTC. Der Parser hat die Zeichenfolge in den internen Wert konvertiert.

Eine java.time.ZonedDateTime (Java 8+) hat eine Zeitzone.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssZ"); 
ZonedDateTime dt = ZonedDateTime.parse("2016-04-21T00:00:00+0530", formatter); 
ZoneId zone = dt.getZone(); 

Wenn die Ausführung von Java 6 oder 7, verwenden Sie die backport of the Java SE 8 date-time classes.
Für Java 5+ verwenden Sie die Joda-Time library.

+0

Leider ist mein Projekt in Java 7. Geben Sie Java 7 geben einige API, die ich geben + 0530 und es gibt IST –

+3

Sie können nicht im Allgemeinen die Zeitzone Name aus einer Zeitzone Offset, weil es viele Namen gibt, die den gleichen Offset verwenden – Andreas

+1

@RahulBGangwar Eine Zeitzone ist ein Offset-von-UTC * plus * eine Reihe von Regeln für die Behandlung von Anomalien wie Sommerzeit Die [Datenbank der Zeitzonen] (https : //en.wikipedia.org/wiki/List_of_tz_database_time_zone) bereits y listet zwei Zonen auf, die denselben Offset von +05: 30 haben. Morgen kann es mehr geben. Jeder kann unterschiedliche Regeln haben. Außerdem sollten Sie keine 3-4-Buchstaben-Codes wie "IST" verwenden, da diese weder standardisiert noch eindeutig sind (Irish Standard Time, India ...). Verwenden Sie den richtigen Namen mit einer offiziellen Definition und Geschichte, "Asien/Colombo", "Asien/Kolkata", "Europa/Dublin". –

0

einfach selbst zu beantworten, so dass es jemanden anderes helfen kann:

Ich wurde als String mit Datum als Eingabe kann sagen:

String startDate = "2016-04-21T00:00:00+0530" 
//i can calculate the timezone offset using 
String offSet = startDate.substring(startDate.length() - 5) //gives +0530 

Methode verwendet, Zeitzone zu berechnen. Hier geben wir Offset oben und die unten Methode gibt das Time-Zone Objekt berechnet:

public static TimeZone fetchTimeZone(String offset) { 
     if (offset.length() != 5) { 
      return null 
     } 

     TimeZone tz 

     Integer offsetHours = Integer.parseInt(offset.substring(0, 3)) 
     Integer offsetMinutes = Integer.parseInt(offset.substring(3)) 

     String[] ids = TimeZone.getAvailableIDs() 

     for (int i = 0; i < ids.length; i++) { 
      tz = TimeZone.getTimeZone(ids[i]) 

      long hours = TimeUnit.MILLISECONDS.toHours(tz.getRawOffset()) 
      long minutes = Math.abs(TimeUnit.MILLISECONDS.toMinutes(tz.getRawOffset()) % 60) 

      if (hours != offsetHours || minutes != offsetMinutes) { 
       tz = null 
      } else { 
       break 
      } 
     } 
     return tz 
    } 

Schließlich verwende ich die Zeitzone von oben Verfahren ein beliebiges Datum zu formatieren, zu dieser Zeitzone:

SimpleDateFormat timeZonedFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") 
TimeZone timeZone = fetchTimeZone(offSet) //from above method and offset from first code 
timeZonedFormatter.setTimeZone(timeZone); 
//this timeZonedFormatter can be used to format any date into the respective timeZone 
Verwandte Themen