2016-09-19 59 views
0

我的代碼使用-Duser.timezone = UTC運行。從字符串「2016-09-14T00:00:00.000-07:00/2016-09-15T00:00:00.000-07:00」確定時區

我期待從字符串中創建正確時區的間隔。 例如:

「2016-09-14T00:00:00.000-07:00/2016-09-15T07:00:00.000-07:00」

Interval.parse(str)應該給我

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

但是,總是給我一個UTC的時間間隔,而不是PST的B/C的-Duser.timezone = UTC選項。

我知道的唯一的辦法來解決,這是繁瑣且包括以下步驟:

  1. 解析字符串
  2. 確定偏移
  3. 查找內容時區是抵消對應。 (白名單?或某人已有名單?)

  4. 然後自己創建一個新的間隔。

有沒有更好的方法?

+0

你傳遞的是整個'日期/ date'字符串解析功能?這只是應該處理一個日期/時間,而不是找出你想要的兩個中的哪一個。你應該在'/'上將字符串分成兩部分,然後將其中一個結果值傳遞給解析器。 –

+0

您不能像'-07:00'那樣將固定偏移量映射到像PST這樣的時區縮寫或像America/Los_Angeles這樣的時區。有太多的含糊之處。閱讀[時區標記wiki](http://stackoverflow.com/tags/timezone/info)中的「Time Zone!= Offset」。另外,考慮到美國的'-07:00'根本不是'PST',而是'MST'或'PDT'。 –

回答

-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); 
+0

這不使用JodaTime,並且正在假定補償確實是PST。實際上,他們不可能。他們可能是PDT,'America/Los_Angeles',但這裏需要Joda-Time的答案。 –

相關問題