当前位置:  开发笔记 > 编程语言 > 正文

Java获得UTC时间

如何解决《Java获得UTC时间》经验,为你挑选了2个好方法。

我想在UTC时区获得时间.所以我写了代码:

import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.Date;

public class RegularSandbox {

    public static void main(String[] args) {

        ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC);

        System.out.println("DATETIME = " + Date.from(utc.toInstant()));

    }
}

问题是输出显示我在PST(我当地时区)的时间.我需要它以UTC输出时间,所以我可以将它存储在我的数据库中.



1> LowLevel..:
System.out.println("DATETIME = " + utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));



2> Meno Hochsch..:

尝试转换成旧版本时,您做得太多java.util.Date。然后,您隐式地使用它的方法toString(),该方法对于观察到的行为应该是众所周知的,以便始终在您的系统时区中打印瞬间。

但是,以UTC时区进行打印非常简单,如果您能应付ISO-8601表示法,则甚至不需要格式化程序:

ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC);

System.out.println("DATETIME = " + utc.toInstant());
// output: DATETIME = 2015-12-30T15:01:18.483Z (Instant is always printed with UTC offset)

System.out.println("DATETIME = " + utc);
// output: DATETIME = 2015-12-30T15:01:57.611Z (the same because you 
// have explicitly set the UTC Offset when constructing the ZonedDateTime)

你看,行为toString()的新的Java-8类的InstantZonedDateTime更清晰,总是在ISO格式。无需将转换为Date

关于专业格式化程序,如果您打算偏离ISO-8601格式,则只需要一个格式化程序-可能使用本地化的月份名称或工作日的额外印刷等。美国风格的示例:

System.out.println(
  "DATETIME = " 
  + utc.format(DateTimeFormatter.ofPattern("MM/dd/uuuu h:mm:ss a xxx")));
// output: DATETIME = 12/30/2015 3:14:50 PM +00:00

请注意,@ LowLevel的答案使用了错误的模式。如果省略符号a(AM / PM标记),则不应选择半天小时符号h,而应选择H(24小时格式)。时区或偏移符号(此处为x)至关重要,因为否则将不会自动将打印的日期时间识别为UTC时区。

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有