【问题标题】:show timing as per own country (and not as per server time)根据自己的国家/地区显示时间(而不是根据服务器时间)
【发布时间】:2012-09-07 16:03:38
【问题描述】:

我正在创建需要存储时间戳/日期的 Web 应用程序。

问题是我在其中一个托管站点上托管了我的站点,而托管站点位于美国。存储数据时,存储的是美国时间,而不是我自己国家的时间。

我认为我需要将托管服务器时间设置为我所在国家/地区的时间,或者我需要在保存之前转换时间。我尝试了一些代码,但我没有得到。

有人可以帮我在java中如何转换时间吗?

当我打印时

 System.out.println(new Date());

我得到的是美国时间,而不是当前时间。我需要将此时间转换为按照我的国家时间(即科威特时间)显示。

编辑 1

当我将日期打印为System.out.println(new Date()); 时,我得到的输出为Thu Sep 06 11:07:49 EDT 2012,这意味着我正在获取服务器时间。

现在我想将此时间转换为某个国家/地区时间,比如说科威特或任何其他国家/地区,即应将同一时间显示为当前国家/地区。

即科威特国的时间应该是Thu Sep 06 19:07:49 AST 2012

对于印度,应该是Thu Sep 06 21:37:49 IST 2012

编辑 2

措辞更好的问题 希望如此

我使用 JSF 创建了一个 Web 应用程序,我的服务器位于美国。我将timestamp 存储在数据库中。现在在打印时间时,我显然会得到数据库中的时间,即美国数据。

我正在准备要在其中显示数据和时间的报告。

+++++++++++++++++++++++++++++++++++
+   Name    +      Time           +
+++++++++++++++++++++++++++++++++++
+ Name 1    +  10/09/2012 10:11   +
+ Name 2    +  10/09/2012 21:11   +
+ Name 3    +  10/09/2012 17:11   +
+++++++++++++++++++++++++++++++++++

现在的问题是这些时间是按照美国时间,因此我需要将这些美国时间转换为我所在的国家时间。我需要显示我访问互联网的时间,即如果我在科威特,我需要按照科威特时间安排这些时间。如果我在迪拜访问这些数据,我需要按照迪拜时间显示报告。

有人可以帮我解决这些问题吗?

【问题讨论】:

    标签: java date web-applications timestamp simpledateformat


    【解决方案1】:

    如果您使用时间操作,您应该使用 Calendar 对象通过 Calendar#getInstance(Timezone) 静态方法获取实例,提供与您的时区相对应的 TimeZone 对象。

    如果您必须打印具有已定义时区的 Date 对象,请获取 DateFormat 对象并将其时区设置为您喜欢的时区。

    这是一个示例:

    SimpleDateFormat dateFormat = new SimpleDateFormat(
                                    "yyyy.MM.dd G 'at' HH:mm:ss z", Locale.UK);
    dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+1:00")); //London?
    
    String fullDateUK = dateFormat.format(new Date());
    
    System.out.println(fullDateUK);
    

    【讨论】:

    • 我相信同样的事情也适用,您只需要使用像 SimpleDateFormat 这样的专用 DateFormat 并设置您需要打印的模式。
    • 好吧,至于编辑 2,您需要存储您的用户 TimeZone 并为这些组件使用日期转换器,并将转换器 timeZone 属性设置为您的用户时区...
    • 如果你可以浏览代码,你可能想检查这个应用程序,我不得不使用一些格式和时区的东西:bitbucket.org/ElderMael/jgtjo
    【解决方案2】:

    java.util.Date 应该是always be giving you UTC。当您将它放在对println 的调用中时,它会转换为本地时间(代码正在执行的地方),因为在对.println() 的调用内部有对.toString() 的隐式调用。

    确保您将日期存储为原始值,并且在此过程中没有在任何地方调用 .toString()(例如当数据库将其转换为分阶段的时间戳时)等。

    Jon Skeet(在我引用的答案中)还建议可能使用替代的 datetime 包,这并不完全符合您的要求,但至少可以提供一些解决问题的替代方法。

    【讨论】:

      【解决方案3】:

      您可以查看与日期相关的国际化项目。这是一个很好的链接,可能有助于开始。 Internationalization

      【讨论】:

        猜你喜欢
        • 2021-07-12
        • 2013-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-14
        • 1970-01-01
        • 2020-02-27
        • 2014-11-22
        相关资源
        最近更新 更多