Data e hora da conversão para outro Fuso horário em java
-
12-11-2019 - |
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();
}
}
}
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);