【问题标题】:Convert time in IDT/IST to unixtime in UTC [duplicate]将IST / IST中的时间转换为UTC中的unix时间[重复]
【发布时间】:2017-01-19 10:36:41
【问题描述】:

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

【问题讨论】:

    标签: java date timezone simpledateformat unix-timestamp


    【解决方案1】:

    如果您想以 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-symbol "z" 将其解释为 Israel Standard Time(至少在我的环境中对我有用)。如果您想确定“IST”的正确解释,那么您应该考虑切换库并在解析时设置您对以色列时间的偏好,例如在 Java-8 中:

    DateTimeFormatterBuilder.setZoneText(TextStyle.SHORT, Collections.singleton(ZoneId.of("Asia/Jerusalem")))

    【讨论】:

    • 嗨。感谢你的回答。如果我想得到我得到的 IDT\IST 字符串日期的 unixtime 怎么办?如果我解析日期,它将返回为当地时间。这个问题的任何解决方案? @Meno Hochschild
    • @user3100708 上面的代码显示了如何将 IDT/IST 字符串解析为 java.util.Date 类型的对象。这个对象永远不是本地时间(尽管它的方法toString() 在您的系统区域中用本地时间不完整地描述了它)。真的,它代表一个瞬间,它的真实状态可以通过getTime()getTime()查询它的真实状态,以毫秒为单位,如果使用这种方法,则只需将结果除以1000,就可以得到Unix时间。跨度>
    猜你喜欢
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    相关资源
    最近更新 更多