嗨,我目前正在使用Swing创建桌面应用程序。我能够使用Java中的Date类将IST转换为EST时间,但无法将EST转换为IST时间,并且它提供的EST时间与IST时间相同。请找到以下代码。

ChangetoEST功能从IST时间开始给出正确的EST时间。
ChangetoIST函数未从EST时间开始提供正确的IST时间,而是将给定的EST时间显示为IST时间。

public String changetoEST(String date) throws ParseException
{
    SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm a");
    String dateInString = date;
    Date d=formatter.parse(dateInString);
    TimeZone tzInAmerica = TimeZone.getTimeZone("America/New_York");
    formatter.setTimeZone(tzInAmerica);
    String sDateInAmerica = formatter.format(d);
    Date dateInAmerica = formatter.parse(sDateInAmerica);
    String a=formatter.format(dateInAmerica);
    return a;
}

public String changetoIST(String date) throws ParseException
{
    SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm a");
    String dateInString = date;
    Date d=formatter.parse(dateInString);
    TimeZone tzInIndian = TimeZone.getTimeZone("Asia/Calcutta");
    formatter.setTimeZone(tzInIndian);
    String sDateInAmerica = formatter.format(d);
    Date dateInAmerica = formatter.parse(sDateInAmerica);
    String a=formatter.format(dateInAmerica);
    return a;
}

最佳答案

无需您显式设置时区即可完成parse调用,这意味着将使用默认时区来完成解析。

在解析之前设置源时区,进行分析,将时区设置为目标时区,然后格式化结果。

例如。

public static String istToEst(String dateInput) throws ParseException {
    return changeTimeZone(dateInput, TimeZone.getTimeZone("Asia/Calcutta"),
                                     TimeZone.getTimeZone("America/New_York"));
}
public static String estToIst(String dateInput) throws ParseException {
    return changeTimeZone(dateInput, TimeZone.getTimeZone("America/New_York"),
                                     TimeZone.getTimeZone("Asia/Calcutta"));
}
private static String changeTimeZone(String dateInput, TimeZone sourceTimeZone,
                                     TimeZone targetTimeZone) throws ParseException {
    SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm a");
    formatter.setTimeZone(sourceTimeZone);
    Date date = formatter.parse(dateInput);
    formatter.setTimeZone(targetTimeZone);
    return formatter.format(date);
}


测试

String dateInput = "08/22/2016 02:21 AM";
System.out.println(dateInput);
System.out.println(istToEst("08/22/2016 02:21 AM"));
System.out.println(estToIst("08/22/2016 02:21 AM"));


输出量

08/22/2016 02:21 AM
08/21/2016 04:51 PM
08/22/2016 11:51 AM

07-25 22:43