簡體   English   中英

使用Java將當前GMT時間轉換為CST時區

[英]Convert current GMT time into CST timezone using java

我正在嘗試使用JDK8將當前GMT時間轉換為CST時間。 但是我的代碼對於兩個時區總是返回相同的時間。 我還驗證了getAvailableIDs()具有“ CST”。

                Calendar cal = Calendar.getInstance();
            TimeZone timeZone = TimeZone.getTimeZone("GMT");
            cal.setTimeZone(timeZone);

            // System.out.println("GMT time = " + cal.getTime());

            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            sdf.setTimeZone(timeZone);
            String gmtDateStr = sdf.format(cal.getTime());
            System.out.println("Formatted GMT time = " + gmtDateStr);

            // To CST
            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            TimeZone cst = TimeZone.getTimeZone("CST");
            sdf2.setTimeZone(cst);
            Date cstDate = sdf2.parse(gmtDateStr);

            // System.out.println("PARSED CST DATE = " + cstDate);

            Calendar cal2 = new GregorianCalendar();
            cal2.setTime(cstDate);
            cal2.setTimeZone(cst);
            String cstDateStr = sdf2.format(cal2.getTime());

            // System.out.println("cal2 time = " + cal2.getTime());
            System.out.println("FORMATTED CST DATE = " + cstDateStr);

怎么了 有人可以給我答案嗎?

您不必進行所有這種轉換就可以在您首選的時區中獲得時間。 您只需執行以下操作即可。

        Calendar cal = Calendar.getInstance();
        TimeZone timeZone = TimeZone.getTimeZone("GMT");
        cal.setTimeZone(timeZone);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf.setTimeZone(timeZone);
        String gmtDateStr = sdf.format(cal.getTime());
        System.out.println("Formatted GMT time = " + gmtDateStr);

        // To CST
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        TimeZone cst = TimeZone.getTimeZone("CST");
        sdf2.setTimeZone(cst);

        System.out.println("FORMATTED CST DATE = " + sdf2.format(cal.getTime()));

Java 8 java.time找不到CST標識的區域

ZoneId cst = ZoneId.of("CST");

結果為java.time.zone.ZoneRulesException: Unknown time-zone ID: CST 這是有道理的,因為在北美有中部標准時間,中國標准時間,以及其他。

如果您指的是以America/Chicago為代表的America/Chicago中部標准時間:

ZoneId gmt = ZoneId.of("GMT");
ZoneId cst = ZoneId.of("America/Chicago");
ZonedDateTime gmtTime = ZonedDateTime.now(gmt);
ZonedDateTime cstTime = gmtTime.withZoneSameInstant(cst);

您的代碼的問題是所有對Calendar.getTime()調用。 這將返回一個Date實例,並且這些對象沒有時區的概念。 因此,在Calendar實例中設置時區是沒有用的,因為在轉換為Date時,您隨后丟棄了該信息。

只需在格式化程序中指定時區,如Yogesh Badke的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM