Ank*_*and 5 java timezone datetime calendar dst
在标记之前重复读取它彻底Plus不能使用Joda Time和Java 8 time.util*.
我正在尝试获取启用了DST的国家/地区的当前日期.因为它有时区,[local-millis] = [UTC-millis] + [offset-millis]所以我添加了DST_OFFSET它以获得启用DST的国家的时间,就像在Linux机器GMT_TIME + LOCAL_TIME_ZONE_OFFSET + DST_OFFSET上完成以获得当前的本地时间.
打印当前DST启用时间为1小时的当前伊斯坦布尔时间的代码.
public class DstInstanbul {
public static void main(String...args){
Calendar calendar = Calendar.getInstance();
TimeZone timeZone = TimeZone.getTimeZone("Europe/Istanbul");
calendar.setTimeZone(timeZone);
calendar.add(Calendar.MILLISECOND, timeZone.getDSTSavings());
SimpleDateFormat simpleDateFormatLocal = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormatLocal.setTimeZone(TimeZone.getTimeZone("Europe/Istanbul"));
System.out.println("Current date and time : " + simpleDateFormatLocal.format(calendar.getTime()));
System.out.println("Current date and time : " + simpleDateFormatLocal.format(calendar.getTime()));
System.out.println("The TimeZone is : " + calendar.getTimeZone().getID());
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我正确的输出
Current date and time : 2015-11-01 20:49:54
The Hour of the Day is : 20
The TimeZone is : Europe/Istanbul
Run Code Online (Sandbox Code Playgroud)
但由于上面的代码是没有这么多的通用的,所以我试图添加以下行,因此,如果仅白天启用然后只添加dstSaving所以我改变了以下calendar.add(Calendar.MILLISECOND, timeZone.getDSTSavings());与
if (timeZone.inDaylightTime(new Date())){
calendar.add(Calendar.MILLISECOND, timeZone.getDSTSavings());
}
Run Code Online (Sandbox Code Playgroud)
但问题是,如果我这样做,我得到没有任何夏令时的输出.和印刷System.out.println(timeZone.inDaylightTime(new Date()));给我假,因此结果,但在这个链接伊斯坦布尔时钟,你可以看到夏令时
Current date and time : 2015-11-01 19:54:49
The TimeZone is : Europe/Istanbul.
Run Code Online (Sandbox Code Playgroud)
对于时区巴西来说,相同的逻辑对于inDaylightTime来说是正确的,但现在提前一小时显示结果
以讨论的方式订购的所有代码的Ideone链接1. https://ideone.com/4NR5Ym 2. https://ideone.com/xH7vhp 3. https://ideone.com/tQenb5
我的问题是timeZone.inDaylightTime(new Date())与伊斯坦布尔时区有什么问题.为什么它显示错误.为什么对巴西来说,即使这inDaylightTime是真的,我也没有获得当前的DST时间.处理这种情况的正确方法是什么?
今天土耳其似乎存在一些有关时区和夏令时的问题。
这可能是因为土耳其将夏令时切换日期从 11 月 1 日更改为 11 月 8 日。
JVM 中的时区数据可能不会随着更改而更新。 Oracle 对其 JVM 进行了更新。
您从上面的链接下载的时区数据更新程序是一个可执行的 jar 文件。要更新 UNIX 主机上的 JVM:
sudo java -jar tzupdater.jar --update --location http://www.iana.org/time-zones/repository/tzdata-latest.tar.gz
Run Code Online (Sandbox Code Playgroud)
该工具似乎没有在更新时输出任何内容,因此要验证运行:
java -jar tzupdater.jar --version
Run Code Online (Sandbox Code Playgroud)
土耳其更新的时区数据版本是tzdata2015g
| 归档时间: |
|
| 查看次数: |
3025 次 |
| 最近记录: |