Pergunta

eu ter escrito este código para converter a data atual do sistema e a hora para outro fuso horário.Eu não estou recebendo nenhum erro, mas eu não estou recebendo a minha saída como o esperado.Como se eu executar o meu programa em um determinado tempo..A minha saída é ::

A hora atual em Índia é :: Fri Feb 24 16:09:23 IST 2012

A data e a hora :: Hora Padrão Central é :: Sat Feb 25 03:39:23 IST 2012

E o Tempo real de acordo com CST de fuso horário é ::

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

Portanto, há algum intervalo de tempo.e eu não sei por que isso está acontecendo.Qualquer ajuda será bem vinda..O código é ::

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();
        }
    }
}
Foi útil?

Solução

É através da web.Poderia ter pesquisei.De qualquer forma, aqui está uma versão para você (descaradamente escolhidos e modificados a partir de aqui):

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

Outras dicas

Seu erro é chamada de parse em vez de format.

Você chamar parse para analisar uma Data a partir de uma Cadeia, mas no seu caso, você tem um encontro e precisa formatá-lo usando o Fuso horário correto.

Substitua o código com o

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 eu espero que você vai obter o resultado que você esperava.

Manipulação de datas em Java no meu trabalho diário não é uma tarefa trivial.Eu sugiro que você use Joda-Time para simplificar a nossa codificação dias e você não ter que "reinventar a roda".

Você pode usar apenas "CST6CDT" porque, em alguns países eles seguem CDT no verão e CST no 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;
     }

O problema é quando você imprime data obj é chamada de toString método e ele irá imprimir em suas máquinas fuso horário padrão.Tente este código e ver a diferença.

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top