java - 日历实例不工作

标签 java gregorian-calendar

尝试使用下面的代码使用 GregorianCalendar 打印不同时区的时间,但不起作用。有什么想法吗?

GregorianCalendar.getInstance(TimeZone.getTimeZone("PST")).getTime()。它按照我的时区打印时间,而不是太平洋标准时间。

最佳答案

按照设计,java.util.Date 将按纪元以来的 UTC 毫秒进行初始化,因此不考虑时区。将生成以下代码:

    Calendar pstCalendar = GregorianCalendar.getInstance(TimeZone.getTimeZone("PST"));
    Calendar defCalendar = GregorianCalendar.getInstance(TimeZone.getDefault());

    // Same values here :
    System.out.println(pstCalendar.getTime());
    System.out.println(defCalendar.getTime());

    // Different values here :
    System.out.println(pstCalendar.get(Calendar.HOUR_OF_DAY));
    System.out.println(defCalendar.get(Calendar.HOUR_OF_DAY));

解决方案是不直接使用 getTime 方法,而是考虑 Calendar.ZONE_OFFSET 并在转换为日期对象之前考虑差异:

    Date d = new Date();

    // Default time :
    System.out.println(d);

    d.setTime(d.getTime() + pstCalendar.get(Calendar.ZONE_OFFSET));

    // Time after applying offset
    System.out.println(d);

关于java - 日历实例不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26438609/

相关文章:

java - JAX-WS,日期时区被误解

java - 在存储的 CLOB 中包含自动增量值

java - 为什么 java.util.Calendar 类在 Android 上给出错误的日期?

java - GregorianCalendar.set(field, value + 1) 与 GregorianCalendar.add(field, 1) 相同吗

Java:如何发布此 XML 请求?

java - Sonarqube 不接受我的测试,但它在我的 Eclipse 中工作

java - 安卓人脸检测

java - 如何在Android中将波斯日期转换为公历日期

java - 字符串到 XMLGregorianCalendar 问题

mysql - 为什么 1582 中的两个 MySQL 日期看起来相同,但比较结果是错误的?