首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在java中将日期从一个时区转换为其他时区

在java中将日期从一个时区转换为其他时区
EN

Stack Overflow用户
提问于 2014-01-25 13:58:45
回答 1查看 4.3K关注 0票数 1

我想使用java中的SimpleDateFormat类将日期从一个时区转换为另一个时区。但不知何故,它产生了不同的结果,这些结果应该在相同的TimeZone中。

这是一个测试用例,它生成一个结果为IST,另一个结果为GMT。我认为它应该只为这两种情况生成GMT。

代码语言:javascript
复制
public class TestOneCoreJava {

    public static void main(String[] args) throws ParseException {// Asia/Calcutta
        DateFormat formatter = new SimpleDateFormat("dd-MMM-yy hh:mm:ss a");
        System.out.println(getDateStringToShow(formatter.parse("26-Nov-10 03:31:20 PM +0530"),"Asia/Calcutta", "Europe/Dublin", false));
        System.out.println(getDateStringToShow(formatter.parse("02-Oct-10 10:00:00 AM +0530"),"Asia/Calcutta", "Europe/Dublin", false));
        //------Output--
        //26-Nov-10 GMT
        //02-Oct-10 IST
    }

    public static String getDateStringToShow(Date date,
            String sourceTimeZoneId, String targetTimeZoneId, boolean includeTime) {
        String result = null;

        // System.out.println("CHANGING TIMEZONE:1 "+UnitedLexConstants.SIMPLE_FORMAT.format(date));
        String date1 = new SimpleDateFormat("dd-MMM-yy hh:mm:ss a").format(date);

        SimpleDateFormat sourceTimeZoneFormat = new SimpleDateFormat("Z");
        sourceTimeZoneFormat.setTimeZone(TimeZone.getTimeZone(sourceTimeZoneId));

        date1 += " " + sourceTimeZoneFormat.format(date);

        // Changed from 'Z' to 'z' to show IST etc, in place of +5:30 etc.
        SimpleDateFormat targetTimeZoneFormat = new SimpleDateFormat("dd-MMM-yy hh:mm:ss a z");
        targetTimeZoneFormat.setTimeZone(TimeZone.getTimeZone(targetTimeZoneId));

        SimpleDateFormat timeZoneDayFormat = null;
        if (includeTime) {
            timeZoneDayFormat = targetTimeZoneFormat;
        } else {
            timeZoneDayFormat = new SimpleDateFormat("dd-MMM-yy z");
        }
        timeZoneDayFormat.setTimeZone(TimeZone.getTimeZone(targetTimeZoneId));
        try {
            result = timeZoneDayFormat.format(targetTimeZoneFormat.parse(date1));
            // System.out.println("CHANGING TIMEZONE:3 "+result);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return result;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2014-01-25 14:21:05

在处理Google API中的时区问题时。我遇到过这样的问题。

看看你的这段代码:

代码语言:javascript
复制
 System.out.println(getDateStringToShow(formatter.parse("26-Nov-10 03:31:20 PM 
 +0530"),"Asia/Calcutta", "Europe/Dublin", false));
 System.out.println(getDateStringToShow(formatter.parse("02-Nov-10 10:00:00 AM 
 +0530"),"Asia/Calcutta", "Europe/Dublin", false));

如果我给上面的输入,它将运行良好,我们想要的方式。

如果你仍然想这样做,那么你必须根据你的需要进行计算。

比如在数学上调整时间,以及类似的事情。

或者,针对您的情况的简单修复将如下所示

代码语言:javascript
复制
SimpleDateFormat d =new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
d.setTimeZone(TimeZone.getTimeZone("Europe/Dublin"));
Date firsttime = d.parse("2013-12-19T03:31:20");
Date seondtime = d.parse("2013-12-19T10:00:00");

System.out.println(getDateStringToShow(firsttime,"Asia/Calcutta",
"Europe/Dublin", false));
System.out.println(getDateStringToShow(seondtime,"Asia/Calcutta", 
"Europe/Dublin", false));

我的建议是推荐JODA API。比起老校友更可取。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21347272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档