我认为所有系统(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
时区值在我的机器中设置,因此输出显示我的本地时区。
是否有机器未设置时区?
答案 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)