在java中将EST时间转换为本地时间

在java中将EST时间转换为本地时间,java,datetime,timezone,simpledateformat,Java,Datetime,Timezone,Simpledateformat,我无法将(2012年12月19日美国东部时间上午8:57)转换为当地时间(现在是印度时间)。 转换时,我的时间错了(2012年12月19日11:27)。我正在使用以下代码: private void convertEdtToLocalTime(String pubDate) { //pubDate = 12/19/2012 8:57am EST; String localPubDate; try { SimpleDateFormat sdf = n

我无法将(2012年12月19日美国东部时间上午8:57)转换为当地时间(现在是印度时间)。 转换时,我的时间错了(2012年12月19日11:27)。我正在使用以下代码:

private void convertEdtToLocalTime(String pubDate)
{
    //pubDate = 12/19/2012 8:57am EST;
    String localPubDate;
    try
    {
        SimpleDateFormat sdf = new SimpleDateFormat(
            "MM/dd/yyyy HH:mma z");
        TimeZone timeZone = TimeZone.getDefault();
        sdf.setTimeZone(timeZone);
        if (pubDate != null)
        {
            Date date = sdf.parse(pubDate);
            sdf = new SimpleDateFormat("MMM dd yyyy HH:mm");
            localPubDate = sdf.format(date);
        }
    }
    catch (ParseException e)
    {
    }
}

您不需要设置时区,因为时区已在pubDate字符串中指定。当您想要使用不同的SDF进行格式化时,默认时区会将其转换为默认时区本身。例如,如果你在印度,IST时间=2012年12月19日19:27

private static  void convertEdtToLocalTime(String pubDate)
    {
        //pubDate = 12/19/2012 8:57am EST;
        String localPubDate=null;
        try
        {
            SimpleDateFormat sdf = new SimpleDateFormat(
                "MM/dd/yyyy HH:mma z");
//          TimeZone timeZone = TimeZone.getDefault(); // No need to do it
//          sdf.setTimeZone(timeZone);
            if (pubDate != null)
            {
                Date date = sdf.parse(pubDate);
                sdf = new SimpleDateFormat("MMM dd yyyy HH:mm");
                localPubDate = sdf.format(date);
            }
        }
        catch (ParseException e)
        {
        }
        System.out.println(localPubDate);
    }

正确的时间是什么?2012年12月19日19:30(印度时间)。@GvSrinivas:你确定你的系统默认时区真的是印度时间吗?实际上我必须获取用户时区并将东部时间转换为用户本地时间。这段代码将在何处执行??用户机器??然后它会给用户本地时间时区。是的。它会在用户机器上执行(全球任何地方)。是否不需要获取用户的时区?sdf.格式(日期);如果未指定其他时区,将在用户本地时区中格式化