簡體   English   中英

Java:日歷實例的時間不正確?

[英]Java: Wrong hour from Calendar instance?

正在運行:

public class test {
    @Test
    public void displayDate() {
        SimpleDateFormat MONTH_FORMAT = new SimpleDateFormat("MMM", Locale.getDefault());
        String testDateStr = "2017-07-01T07:58:23.000Z";
        Calendar calendar = getFormatedDate(testDateStr);
        int yearInt  = calendar.get(Calendar.YEAR);
        String monthStr = MONTH_FORMAT.format(calendar.getTime()).toUpperCase();
        int monthInt = calendar.get(Calendar.MONTH);
        int dayInt  = calendar.get(Calendar.DAY_OF_MONTH);
        int hour24 = calendar.get(Calendar.HOUR_OF_DAY);
        int min = calendar.get(Calendar.MINUTE);
        int sec = calendar.get(Calendar.SECOND);
        System.out.println(testDateStr);
        System.out.println(String.format("%s-%s-%s %s:%s:%s", yearInt, monthStr, dayInt, hour24, min, sec));
        System.out.println(String.format("%s-%s-%s %s:%s:%s", yearInt, monthInt, dayInt, hour24, min, sec));

    }

    private Calendar getFormatedDate(String dateStr) {
        Instant instant;
        try {
            instant = Instant.parse(dateStr);
        } catch (DateTimeParseException e) {
            e.printStackTrace();
            return null;
        }
        ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault());
        Calendar calendar = GregorianCalendar.from(zdt);
        return calendar;
    }
}

我越來越:

2017-07-01T07:58:23.000Z
2017-JUL-1 9:58:23
2017-6-1 9:58:23

請注意,我的小時數= 9,而預期的是7

問題

  1. 為什么會這樣
  2. 如何獲得正確的結果?

謝謝 !

為什么會這樣

由於此行: ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault());
您將時區強制設置為dateStr定義的時區 ,因此Calendar將使用您的時區,而不是原始時區。

如何獲得正確的結果?

將您的getFormatedDate方法更改為:

private Calendar getFormatedDate(final String dateStr) {
    final ZonedDateTime zdt = ZonedDateTime.parse(dateStr);
    return GregorianCalendar.from(zdt);
}

暫無
暫無

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

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