【问题标题】:Java - Format DateTime taking TimeZone into accountJava - 考虑 TimeZone 格式化 DateTime
【发布时间】:2012-09-29 23:27:04
【问题描述】:

1) 所以,我有一个以秒为单位的日期和时间,时区偏移也以秒为单位。

事件时间 = 1348880602
eventTimezoneOffset = -180

2) 我是这样打印出来的:

Date date = new Date(eventTime);
SimpleDateFormat sdf = new SimpleDateFormat("E, MMM dd, yyyy @ h:mmaa");
System.out.println(sdf.format(date));

哪个产生:2012 年 9 月 28 日星期五,晚上 10:03

3) 但是,这是在我的机器上运行时使用的。

当我在我的服务器上运行它时,它给了我:Fri, Sep 28, 2012 @ 9:03PM

因为我的服务器和我的机器上的时差。

4) 因此,我尝试使用 eventTimezoneOffset 来设置 Date 或 SimpleDateFormat 对象以表示正确时区时间的时间,而不管运行应用程序的服务器位于何处。

5) 我尝试在 SimpleDateFormat 上设置时区,但不确定如何使用我拥有的 eventTimezoneOffset 在几秒钟内完成。

6) 澄清一下,这些事件可以在世界各地发生。自 Epoch 以来,每个事件都以秒为单位进行跟踪。因此,当仅查看 eventTime 时,它​​将显示应用程序正在运行的任何时区。为了获得事件的确切时间,考虑到位置时区,提供了 timezoneOffet。我只是不确定如何应用 timezoneOffset。

【问题讨论】:

    标签: java date timezone


    【解决方案1】:

    使用SimpleDateFormat实例的setTimeZone方法设置时区:

    SimpleDateFormat sdf = new SimpleDateFormat("E, MMM dd, yyyy @ h:mmaa");
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    

    【讨论】:

    • 好吧,我尝试这样做,结果是:2012 年 9 月 29 日星期六 @ 1:00AM。我想要做的是使用时区偏移量,以便我可以让事件时间显示在它发生的区域中,而不管运行应用程序的服务器位于何处。有意义吗?
    • 您应该能够在您提出的问题中看到问题的解决方案。将日期和时间保留为 UTC 是一种很好的做法,因为它是一个全球性的固定参考点。为了从 UTC 进行调整,还必须(以某种方式)保持适当的语言环境,以便您的代码可以确定目标偏移量。如果您确定您的应用程序将仅在一个时区使用,那么您无需保留该信息(您可以将该时区用作通用默认值)。但是,如果您的应用可能跨越多个语言环境,您还需要将语言环境与时间戳一起保留。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2010-12-04
    • 2021-01-21
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    相关资源
    最近更新 更多