可以有没有设置时区的机器吗?

时间:2014-05-29 09:55:08

标签: java linux timezone

我认为所有系统(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

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

是否有机器未设置时区?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

简答:可以,但不应该

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

答案 2 :(得分:1)

即使您可以找到时区未设置的操作系统,您也无法通过Java代码确定此区域。

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

TimeZone.getDefault() 总是使用GMT返回时区值,如果它真的无法弄清楚本地使用的是什么。来自the Javadocs

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

答案 3 :(得分:1)

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

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

AFAIK,Windows上始终会设置时区。 (我不确定WindowsCE)