当我运行以下行时,
System.out.println(java.util.TimeZone.getDefault());
我得到了以下输出。
sun.util.calendar.ZoneInfo[id="Asia/Calcutta",
offset=19800000,
dstSavings=0,
useDaylight=false,
transitions=6,
lastRule=null]
和
System.out.println(Locale.getDefault());
给出了
`en_US`
我怀疑是
当Locale
为en_US
时,Zone id
怎么可能Asia/Calcutta
?
在第一个输出中,我还没有理解什么是offset, dstSavings, useDaylight, transitions and rules ?
任何人都可以帮助理解这些。
提前致谢...
答案 0 :(得分:2)
Locale
与TimeZone
无关,如果您愿意,可以在澳大利亚用法语设置您的计算机......您不需要法国TimeZone。
要了解有关TimeZone的更多信息,请阅读以下内容:
toString()
:ZoneInfo <强> useDaylightTime 强>
public abstract boolean useDaylightTime()
查询此时区是否使用夏令时。
<强> getDSTSavings 强>
public int getDSTSavings()
返回添加到本地标准时间以获取本地挂钟时间的时间量。
所以这是UTC + TimeZone +(DSTSavings - 0或1小时)之间的差异。如果您目前处于DST节省模式,将返回1小时。
<强>规则强>
规则指的是DST处于活动状态的日期和不再存在的日期。更多信息SimpleTimeZone。
<强>转换强>
此数组描述此时区的GMT偏移的转换,包括原始偏移更改和夏令时更改。长整数由四个位字段组成。
最重要的52位字段表示转换时间 格里高利1970年1月1日格林威治标准时间00:00:00 下一个4位字段保留,必须为0。 下一个4位字段是偏移[]的索引值,用于转换时的夏令时量。如果该值为零,则表示 没有夏令时,没有索引值为零。 最低有效4位字段是偏移[]的索引值,用于转换时的总GMT偏移。
如果此时区不遵守夏令时,则从未 在过去更改了任何GMT偏移量,此值为空。
答案 1 :(得分:1)
检查 this question以了解Locale.getDefault()的实际工作方式。
至于System.out.println(java.util.TimeZone.getDefault());
希望这有帮助。