有没有一台机器可以不设置时区?

3

我假设所有系统(包括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);
    }
}

输出: 本地时区:亚洲/加尔各答

时间区域值已在我的计算机上设置,因此输出显示我的本地时间区域。

是否可能存在一个没有设置时间区域的机器?

4个回答

2
这确实是可能的,在嵌入式Linux系统中很常见。例如,当整个操作系统必须从64MB闪存中运行时,供应商可能会选择在编译设备的Linux堆栈时不包括时区。
即使没有设置,我认为Java也会返回默认值(可能是UTC),因为它在更高的级别上运行。
据我所知,在Windows上始终会设置时区。(我不确定WindowsCE)

1

从技术上讲,是可以的。但从实际情况来看,不必要。我认为最重要的问题是你应该支持什么。如果你不需要支持边缘系统,那就不用担心它。


我从朋友那里听说在Linux中可以不设置时区。我在谷歌上搜索了一下,但没有找到相关信息。因此我在这里发布了这个问题。无论如何,感谢你的回答。 - Murali
1
@Murali - 嗯,大多数Linux操作系统希望将时区数据保存在软件时钟上。从技术上讲,可能存在没有时区的系统,但这并不是我担心的问题。像那样的系统往往具有非常特定的用途。 - OrhanC1

1

简短回答: 可以,但不应该

个人而言,我更喜欢在服务器上处理UTC,因为时区和夏令时的概念会在我将机器移动到世界各地时造成问题(在我的工作领域中,这种情况经常发生)。即使我设置了时区,我也选择雷克雅未克。这是运行UTC而无需考虑夏令时的最简单方式。


“可以,但不应该。” > 你能具体点吗?那是一个非常模糊的回答。你的第二段话虽然有趣,但并没有回答问题,所以你的“简短回答”实际上是你目前的全部回答。 - Duncan Jones

1
即使你能找到一个没有设置时区的操作系统,你也无法从Java代码中确定它。时区是从存储在格式化程序中的Calendar对象中检索的。如果在调用Calendar.getInstance()时未指定任何内容,则Calendar始终与时区相关联,使用TimeZone.getDefault()返回的值。如果TimeZone.getDefault()在真正无法确定本地使用的时区时,将始终返回一个时区值,使用GMT。来自Javadocs:[使用] GMT作为最后的手段,如果给定或检测到的时区ID未知。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接