将 IDT/IST 中的时间转换为 UTC 中的 unixtime



我正在尝试将 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")))

相关内容

  • 没有找到相关文章

最新更新