web-dev-qa-db-de.com

Datums- und Uhrzeitumstellung in eine andere Zeitzone in Java

ich habe diesen Code geschrieben, um das aktuelle Datum und die Uhrzeit des Systems in eine andere Zeitzone zu konvertieren. Ich bekomme keine Fehler, aber ich bekomme meine Ergebnisse nicht wie erwartet. Als ob ich mein Programm zu einem bestimmten Zeitpunkt ausführen würde. Meine Ausgabe ist: 

Die aktuelle Zeit in India ist :: Fri Feb 24 16:09:23 IST 2012

Das Datum und die Uhrzeit in :: Central Standard Time lautet :: Sat Feb 25 03:39:23 IST 2012

Und die tatsächliche Zeit gemäß CST-Zeitzone lautet: 

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

Es gibt also Zeitlücke. und ich weiß nicht, warum das so ist. Jede Hilfe wird geschätzt .. Der Code lautet: 

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();
        }
    }
}
8
Shantanu Tomar

Es ist über dem Web. Könnte gegoogelt haben Wie auch immer, hier ist eine Version für Sie (schamlos aus hier ausgewählt) 

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());
19
Nishant

Ihr Fehler ist, parse anstelle von format aufzurufen.

Sie rufen parse auf, um ein Datum aus einer Zeichenfolge zu analysieren, aber in Ihrem Fall haben Sie ein Datum und müssen es mit der richtigen Zeitzone formatieren.

Ersetzen Sie Ihren Code durch

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())

und ich hoffe, dass Sie die Ausgabe erhalten, die Sie erwarten.

8
Oleg Mikheev

Der Umgang mit Terminen in Java in meiner täglichen Arbeit ist eine nicht triviale Aufgabe. Ich schlage vor, Sie verwenden Joda-Time , um die Codiertage zu vereinfachen und Sie müssen das Rad nicht neu erfinden.

4
Dario

Sie können einfach "CST6CDT" Verwenden, da sie in einigen Ländern der CDT im Sommer und CST im Winter folgen

 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;
     }
1
Pratik Sinha

Problem ist, wenn Sie ein Datum drucken, das die Methode toString aufruft und in der Standardzeitzone Ihres Computers gedruckt wird. Versuchen Sie diesen Code und sehen Sie den Unterschied.

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);
1
Abhishek bhutra