java有没有不设置时区的机器?
我假设所有系统(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
时区值在我的机器中设置,因此输出显示我的本地时区
有没有一台机器没有设置时区
# 1 楼答案
这确实是可能的,而且在嵌入式Linux系统上很常见。例如,当整个操作系统必须从64MB的闪存中运行时,供应商可能会在为设备编译Linux堆栈时选择不包括时区
即使没有设置,我也会认为Java会返回一个默认值(可能是UTC),因为它在更高的级别上运行
好吧,Windows上总是会设置时区。(我对WindowsCE不确定)
# 2 楼答案
从技术上讲,是的。实际上,没有。我认为最重要的问题是你应该支持什么。如果你不需要支持边缘系统,那就不用担心了
# 3 楼答案
即使假设您可以找到一个没有设置时区的操作系统,您也无法从Java代码中确定这一点
时区是从存储在格式化程序中的
Calendar
对象中检索的。如果在对Calendar.getInstance()
的调用中没有指定任何内容,则Calendar
始终使用TimeZone.getDefault()
返回的值与时区相关联TimeZone.getDefault()
将始终返回一个时区值,如果它确实无法确定本地正在使用什么,则使用GMT
。从the Javadocs# 4 楼答案
简短回答:可以,但不应该
就我个人而言,我更喜欢在我的服务器上处理UTC,因为时区和DST的概念会让我在世界各地移动机器时(在我的工作领域,这种情况经常发生)。甚至我也有一套时区:雷克雅未克。这是让机器在没有DST的情况下运行UTC的最简单方法