从字符串“2016-09-14T00:00:00.000-07:00 / 2016-09-15T00:00:00.000-07:00”确定时区

时间:2016-09-19 19:34:35

标签: java datetime timezone jodatime

我的代码使用-Duser.timezone = UTC。

运行

我希望用字符串创建一个具有正确时区的Interval。 例如:

“2016-09-14T00:00:00.000-07:00 / 2016-09-15T07:00:00.000-07:00”

Interval.parse(str)应该给我

PST

[2016-09-14 / 2016-09-15]

但总是给我一个UTC时间间隔,而不是-buser.timezone = UTC选项的PST b / c。

我知道要解决这个问题的唯一方法是单调乏味,并涉及以下步骤:

  1. 解析字符串
  2. 确定抵消
  3. 查找偏移对应的时区。 (白名单?或某人已经有名单?)

  4. 然后自己创建一个新的Interval。

  5. 有更好的方法吗?

1 个答案:

答案 0 :(得分:-1)

这应该让你开始:

    String dateString = "2016-09-14T00:00:00.000-0700/2016-09-15T07:00:00.000-0700";
    String datesInString[] = dateString.split("/");

    SimpleDateFormat inputDateFormat = new SimpleDateFormat(
            "yyyy-MM-dd'T'HH:mm:ss.SSSZ");
    SimpleDateFormat outputDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    outputDateFormat.setTimeZone(TimeZone.getTimeZone("PST"));
    Date date0 = inputDateFormat.parse(datesInString[0]);
    Date date1 = inputDateFormat.parse(datesInString[1]);
    String result = outputDateFormat.format(date0) + "/"
            + outputDateFormat.format(date1) + " "
            + outputDateFormat.getTimeZone().getID();
    System.out.println(result);