我有以下代码:
//this line returns - UTC
TimeZone timeZone = TimeZone.getDefault();
//date1 - todays date in UTC format
boolean dstInit = timeZone.inDaylightTime(date1);
//date2 - todays date in UTC format
boolean dstNext = timeZone.inDaylightTime(date2);
但是由于某些原因,dstInit和dstNext都返回false(而不是TRUE)。date1和date2是2014年6月20日,在美国夏令时3月到10月之间。有人能帮我解决这个问题吗?
UTC不是一种格式。这是一个计时系统。
-
TAI -由精密原子钟测量
-
UT1 -由地球的不精确旋转测量
-
UTC - 通过向TAI添加闰秒来计算,使其与UT1对齐在0.9秒内。
UTC是我们在计算中使用的通用标准。UTC中的时间可以用各种各样的格式表示,但是对于每个人来说总是相同的时间。它不受时区的影响,并且它永远不会更改夏令时
//date1 - todays date in UTC format
boolean dstInit = timeZone.inDaylightTime(date1);
如果date1
是java Date
对象,则注释是错误的。Java Date是一个对long
的愚蠢包装,它只表示"物理"时间中的一个瞬间点,它不存储时区(也不是民用日期字段),并且它没有"格式"。
因此,上面的行只是告诉在那个时区 (UTC)中的那个瞬间是否对应于daylightTime。当然,它将始终返回false
,因为UTC(伪)时区没有DST。