【问题标题】:Can there be a machine where time zone is not set?可以有没有设置时区的机器吗?
【发布时间】:2014-05-29 09:55:08
【问题描述】:

我假设所有系统(Windows、Mac、Linux、Solaris、SunOS、HP-UX、AIX、FreeBSD、NetWare、OS/400 等)都具有时区值。因此我编写了以下程序来获取系统的本地时区:

import java.text.DateFormat;
public class LocalTimeZone {
    public static void main(String[] args) {
        String local_time_zone;
        DateFormat df = DateFormat.getTimeInstance(DateFormat.FULL);
        local_time_zone=df.getTimeZone().getID();
        System.out.println("local time zone: " + local_time_zone);
    }
}

输出: local time zone: Asia/Calcutta

时区值在我的机器中设置,因此输出显示我的本地时区。

能有没有设置时区的机器吗?

【问题讨论】:

    标签: java linux timezone


    【解决方案1】:

    这确实是可能的,并且在嵌入式 Linux 系统上很常见。例如,当整个操作系统必须从 64MB 的闪存中运行时,供应商可能会选择在为其设备编译 Linux 堆栈时不包括时区。

    即使没有设置,我认为 Java 会返回一个默认值(可能是 UTC),因为它在更高级别上运行。

    AFAIK,Windows 上总会设置一个时区。 (我不确定 WindowsCE)

    【讨论】:

      【解决方案2】:

      从技术上讲,是的。实际上,没有。我认为最重要的问题是您应该支持什么。如果您不需要支持边缘系统,请不要担心。

      【讨论】:

      • 我从我的一位朋友那里听说,在 linux 中可以不设置时区。我在谷歌上搜索了这个并没有得到任何相关信息。因此我在这里发布了这个问题。无论如何感谢您的回答。
      • @Murali - 大多数 Linux 操作系统都希望在其软件时钟上保留时区数据。从技术上讲,可能存在一个没有时区的系统,但这真的不是我担心的事情。像这样的系统往往有非常特定的用途。
      【解决方案3】:

      简答:可以,但不应该

      就个人而言,我更喜欢在我的服务器上处理 UTC,因为当我在世界各地移动机器时,时区和 DST 的概念会搞砸(在我的工作中,这种情况经常发生)。甚至我也设置了时区:雷克雅未克。这是让机器在没有 DST 的情况下运行 UTC 的最简单方法。

      【讨论】:

      • "可以,但不应该" > 你能说得更具体点吗?这是一个非常模糊的答案。您的第二段虽然很有趣,但并未解决问题,因此您的“简短答案”实际上是您目前的全部答案。
      【解决方案4】:

      即使您可以找到未设置时区的操作系统,您也无法从您的 Java 代码中确定这一点。

      时区是从存储在格式化程序中的Calendar 对象中检索的。 Calendar 始终与时区相关联,如果您在调用 Calendar.getInstance() 时未指定任何内容,则使用 TimeZone.getDefault() 返回的值。

      TimeZone.getDefault() 将总是返回一个时区值,如果它真的无法确定本地使用的是什么,则使用 GMT。来自the Javadocs:

      • [使用]GMT 作为给定或检测到的时区 ID 未知的最后手段

      【讨论】:

        猜你喜欢
        • 2016-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多