【问题标题】:Convert UTC Time with offset to LocalTime将带偏移量的 UTC 时间转换为 LocalTime
【发布时间】:2017-03-31 03:46:58
【问题描述】:

我用的是joda 2.7,我要转换

      UTC Time= 09:30:10-06:00
   to Local Time= 03:30:10
         and
      UTC Time=10:45:00+07:30
   to Local Time = 18:15:00

我尝试了 joda 和我自己的不同格式以及处理偏移部分的方法,但我无法获得所需的输出。什么是最好的方法。

【问题讨论】:

    标签: jodatime localtime


    【解决方案1】:

    你可以这样做:

    DateTimeFormatter fmt = DateTimeFormat.forPattern("HH:mm:ssZ");
    String utcTime = "09:30:10-06:00";
    DateTime localTime = fmt.parseDateTime(utcTime);
    String localTimeString = localTime.toString("HH:mm:ss");
    

    这将根据您的默认时区将其转换为您的本地时间(执行System.out.println(DateTimeZone.getDefault()) 以检查您的默认时区)。

    如果您想转换到不同的时区,您需要执行以下操作:

    DateTimeFormatter fmt = DateTimeFormat.forPattern("HH:mm:ssZ").withZone(/*DateTimeZone you want*/);
    

    在您的特定情况下,要获得所需的输出,您只需要使用具有所需输出的时区:

    DateTimeFormatter fmt = DateTimeFormat.forPattern("HH:mm:ssZ").withZone(DateTimeZone.forOffsetHours(-12));
    
    String utcTime = "09:30:10-06:00";
    DateTime localTime = fmt.parseDateTime(utcTime);
    System.out.println(localTime.toString("HH:mm:ss"));
    
    utcTime = "10:45:00+07:30";
    localTime = fmt.withZone(DateTimeZone.forOffsetHours(15)).parseDateTime(utcTime);
    System.out.println(localTime.toString("HH:mm:ss"));
    

    输出是:

    03:30:10
    18:15:00
    

    【讨论】:

    • 好的,当我尝试这个时,我得到的时间是 08:30:10,对吗?我希望时间是 03:30:10
    • 那行得通,你如何计算偏移小时数?我的意思是,如果我得到任何偏移量的时间,我该如何概括选择偏移量步骤。
    • 是,+还是-(2*偏移时间)?
    • 我认为仅从这两个示例很难概括。首先,您从 GMT -6 转换为 GMT -12,即晚了 6 小时。在第二个中,您将从 GMT +7:30 转换为 GMT +15(提前 7.5 小时)。您需要获取所有可能的情况,并尝试对其进行概括并获得公式(如果可能),或者根据您的需要单独处理每种情况。 “加倍”当前偏移量适用于这两种情况,但它适用于您想要的所有情况吗? (我假设您可能有更多不同的情况;如果没有,那么上面的代码应该足够了)
    猜你喜欢
    • 2011-03-22
    • 2020-05-01
    • 2022-06-27
    • 1970-01-01
    • 2012-05-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多