如何从日历中获取 UTC 时间戳?

在Java中,当我使用时,我得到当前时区的对象。但通常以 UTC 时间存储,而不是以本地时间存储。那么如何从日历实例获取 UTC 时间呢?Calendar.getInstance();Calendarjava.sql.Timestamp

    DateFormat df = DateFormat.getTimeInstance();
    Calendar cal = Calendar.getInstance();
    Timestamp time = new Timestamp(cal.getTimeInMillis());

    // Prints local time
    System.out.println(df.format(new Date(time.getTime())));

    // Printe local time, but I want UTT Time
    System.out.println("timestamp: " + time);

答案 1

当您调用 时,这将为您提供一个没有相关时区的值 - 或者您可以将其视为UTC - 日历所代表的时刻。因此,如果日历的时区是(比如说)上午9点,则可能是UTC时间下午5点。Calendar.getTime()

现在(我想)当你调用(无论是隐式还是显式)时,它将在系统默认时区中格式化 - 但不要让它欺骗你,让你认为时区是对象本身内数据的一部分。java.util.DateTimestamptoString()

你需要非常清楚你到底想实现什么 - 然后你可能会发现Joda Time让你在代码中比内置库更清楚地表达这一点。


答案 2

您的代码已经完全按照您的要求执行操作。 (以及 )没有时区信息,应始终包含 GMT 时间戳(返回什么)。TimestampDateCalendar.getTimeInMillis()

您看到打印本地时间的原因是工厂方法以及隐式使用系统时区。DateFormatTimestamp.toString()