有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从GMT到CST的java转换显示7小时的差异

我用下面的函数将日期“2016-04-26 12:00:00”转换为GMT和CST时代。我得到了下面的日期。我不确定我在这里做错了什么

    1461672000000 UTC ——> Tue, 26 Apr 2016 12:00:00 GMT
    1461690000000  CST —> Tue, 26 Apr 2016 17:00:00 GMT

代码:

long epoch = 0;
String str = "2016-04-26 12:00:00";  
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("CST"));  //This GMT or CST
Date datenew = df.parse(str); //parsethe date
epoch = datenew.getTime(); //get the epoch time

共 (1) 个答案

  1. # 1 楼答案

    正如埃里克森在评论中回避的那样,你的期望似乎与实施背道而驰;在日期格式中设置时区时,使用日期格式。parse()方法生成它正在解析的字符串,就像它来自时区(并将其转换为本地时间)。所以你所注意到的结果正是你所期待的

    要解决此问题,请使用日期格式。改为format()方法:

    public static void main(String[] args) {
        String dateStr = "2016-04-26 12:00:00";
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        df.setTimeZone(TimeZone.getTimeZone("GMT"));
    
        Date gmtDate = null;
        try {
            gmtDate = df.parse(dateStr);
        }
        catch (ParseException e) {
            e.printStackTrace();
        }
    
        System.out.println("GMT TIME = " + df.format(gmtDate));
        df.setTimeZone(TimeZone.getTimeZone("CST"));
        System.out.println("CST TIME = " + df.format(gmtDate));
    }
    

    输出:

    GMT TIME = 2016-04-26 12:00:00
    CST TIME = 2016-04-26 07:00:00