2012-02-24 11 views
6

Ho scritto questo codice per convertire la data e l'ora del sistema corrente in un altro fuso orario. Non ricevo alcun errore ma non ottengo il risultato come previsto. Come se eseguo il mio programma in un momento particolare .. La mia uscita è ::Conversione di data e ora in un altro fuso orario in java

L'ora attuale in India è :: Fri Feb 24 16:09:23 IST 2012

La data e l'ora in :: centrale Ora solare è: : Sat Feb 25 03:39:23 IST 2012

e il tempo reale in base alle CST fuso orario è ::

Friday, 24 February 4:39:16 a.m(GMT - 6:00) 

Quindi c'è un intervallo di tempo . e non so perché questo sta accadendo. Qualsiasi aiuto sarà apprezzato .. Il codice è ::

package MyPackage; 

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 

import java.util.Calendar; 
import java.util.Date; 
import java.util.TimeZone; 

public class Temp2 { 


    public static void main(String[] args) { 

     try { 
      Calendar currentdate = Calendar.getInstance(); 
      String strdate = null; 
      DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); 
      strdate = formatter.format(currentdate.getTime()); 
      TimeZone obj = TimeZone.getTimeZone("CST"); 

      formatter.setTimeZone(obj); 
      //System.out.println(strdate); 
      //System.out.println(formatter.parse(strdate)); 
      Date theResult = formatter.parse(strdate); 

      System.out.println("The current time in India is :: " +currentdate.getTime()); 

      System.out.println("The date and time in :: "+ obj.getDisplayName() + "is ::" + theResult); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+2

legale effetto ? – Nishant

+1

Il tempo di gestione con java.util diventa rapidamente un mal di testa, se hai un po 'di tempo, controlla l'API joda-time – angryInsomniac

+0

Dai un'occhiata a questo http://stackoverflow.com/questions/2356672/date-parsing-formating-with -timezone-and-simpledateformat-problem-around-dst-swi – Pavan

risposta

15

È sul web. Potrebbe avere cercato su Google. In ogni modo, qui è una versione per voi (spudoratamente preso e modificato da here):

Calendar calendar = Calendar.getInstance(); 
TimeZone fromTimeZone = calendar.getTimeZone(); 
TimeZone toTimeZone = TimeZone.getTimeZone("CST"); 

calendar.setTimeZone(fromTimeZone); 
calendar.add(Calendar.MILLISECOND, fromTimeZone.getRawOffset() * -1); 
if (fromTimeZone.inDaylightTime(calendar.getTime())) { 
    calendar.add(Calendar.MILLISECOND, calendar.getTimeZone().getDSTSavings() * -1); 
} 

calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset()); 
if (toTimeZone.inDaylightTime(calendar.getTime())) { 
    calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings()); 
} 

System.out.println(calendar.getTime()); 
+0

Grazie nishant .. per la risposta .. sto ricevendo l'ora ryt..ma la data non è ancora corretta .. mi sta dando ..25 ° invece che 24 ° ... Per favore, se riesci a ottenere quel ryt .. ?? thanx –

+1

@ user1230183 ha aggiornato la risposta. – Nishant

+0

Grazie nishant .. problema risolto .. :) .. grazie mille .. :) –

7

Il tuo errore è quello di chiamare parse invece di format.

Chiama parse per analizzare una data da una stringa, ma nel tuo caso hai una data e devi formattarla utilizzando il fuso orario corretto.

Sostituire il codice con

Calendar currentdate = Calendar.getInstance(); 
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); 
TimeZone obj = TimeZone.getTimeZone("CST"); 
formatter.setTimeZone(obj); 
System.out.println("Local:: " +currentdate.getTime()); 
System.out.println("CST:: "+ formatter.format(currentdate.getTime()) 

e spero si otterrà l'output vi aspettate.

+0

L'ho provato .. ma mi dà un'eccezione java.lang.IllegalArgumentException: Impossibile formattare l'oggetto dato come data –

+0

scusa avevo bisogno di fornire più di un solo linea - risposta aggiornata –

3

Handling date in Java nel mio lavoro quotidiano è un compito non banale. Ti suggerisco di usare Joda-Time per semplificare i nostri giorni di programmazione e non devi "re-inventare la ruota".

+0

grazie Dario .. per il suggerimento .. metterà sicuramente il mio codice in questo modo .. e vedere se le cose funzionano ... –

+0

Joda- La home page del tempo è stata spostata. Così ho aggiornato il link. – naXa

0

Il problema si verifica quando si stampa data obj it chiama il metodo toString e verrà stampato nel fuso orario predefinito della macchina. Prova questo codice e vedi le differenze.

Calendar currentdate = Calendar.getInstance(); 
String strdate = null; 
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ssz"); 
strdate = formatter.format(currentdate.getTime()); 
System.out.println("strdate=>" + strdate); 
TimeZone obj = TimeZone.getTimeZone("CST"); 

formatter.setTimeZone(obj); 
strdate = formatter.format(currentdate.getTime()); 
Date theResult = formatter.parse(strdate); 

System.out.println("The current time in India is :: " +currentdate.getTime()); 

System.out.println("The date and time in :: " + obj.getDisplayName() + "is ::" + theResult); 
System.out.println("The date and time in :: " + obj.getDisplayName() + "is ::" + strdate); 
+0

Thanx abhutra .. io lo so dal tuo codice ... :) –

+0

hai l'errore che stavi facendo ..? –

+0

Beh, non esattamente ... Ma cosa stai dicendo, sembra che sto stampando la data senza convertire il fuso orario del CST .. Ti sarà grato se spiegherai dove sono andato storto .. ?? –

0

provare qualcosa di simile

Date date = new Date(); 
String formatPattern = ....; 
SimpleDateFormat sdf = new SimpleDateFormat(formatPattern); 

TimeZone T1; 
TimeZone T2; 

// set the Calendar of sdf to timezone T1 
sdf.setTimeZone(T1); 
System.out.println(sdf.format(date)); 

// set the Calendar of sdf to timezone T2 
sdf.setTimeZone(T2); 
System.out.println(sdf.format(date)); 

// Use the 'calOfT2' instance-methods to get specific info 
// about the time-of-day for date 'date' in timezone T2. 
Calendar calOfT2 = sdf.getCalendar(); 
+1

È fantastico spiegare la tua risposta. –

0

Si può semplicemente utilizzare "CST6CDT" perché in alcuni paesi seguono CDT in estate e CST in inverno

public static String getDateInCST() { 
      Calendar calendar = Calendar.getInstance(); 
      DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 
      formatter.setTimeZone(TimeZone.getTimeZone("CST6CDT")); 
      String strdate = formatter.format(calendar.getTime()); 
      TimeZone.getAvailableIDs(); 
      return strdate; 
    } 
Problemi correlati