我正在尝试将 IDT 和 IST 日期解析为 UTC
中的 unixtime例如:
Thu Sep 10 07:30:20 IDT 2016
对于这个日期,我想获得日期的 unix 时间,但以 04:30:20
为单位如果是 IST,我想在同一日期
获得 05:30:20 的 unixtime
SimpleDateFormat formatter= new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
formatter.setTimeZone(TimeZone.getTimeZone("UTC");
System.out.println(formatter.parse(date).getTime())
我仍然得到 07:30:20 的 unixtime 而不是 05:30:20 或 04:30:20 (IST/IDT)
如果您想在 UTC 中查看格式化结果,那么您需要第二个格式化程序,其可能具有不同的模式和区域设置,并将区域设置为 UTC:
String input1 = "Sat Sep 10 07:30:20 IDT 2016";
String input2 = "Sat Dec 10 07:30:20 IST 2016";
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
Date d1 = sdf.parse(input1);
Date d2 = sdf.parse(input2);
SimpleDateFormat sdfOut =
new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
sdfOut.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println("IDT=>UTC: " + sdfOut.format(d1));
System.out.println("IST=>UTC: " + sdfOut.format(d2));
输出:
IDT=>UTC: Sat Sep 10 04:30:20 UTC 2016
IST=>UTC: Sat Dec 10 05:30:20 UTC 2016
解析格式化程序不需要设置特殊区域,因为您的输入包含相关的区域信息。
旁注:解析时区缩写(如 IST)是危险的,因为此缩写有多种含义。你显然想要以色列时间,但IST更经常被解释为印度标准时间。好吧,您很幸运SimpleDateFormat
符号"z"将其解释为以色列标准时间(至少在我的环境中对我有用)。如果你想确定"IST"的正确解释,那么你应该考虑切换库,并在解析时设置你对以色列时间的偏好,例如在Java-8中:
DateTimeFormatterBuilder.setZoneText(TextStyle.SHORT, Collections.singleton(ZoneId.of("Asia/Jerusalem")))