2012-07-06 14 views
0

我有一個字符串格式爲"\/Date(1339638938087-0500)\/"從Web服務api。如何在Java中使用格式「/Date(1339638938087-0500) /」解析日期字符串?

使用java,我怎樣才能把這個變成org.joda.time.DateTime變量?

+3

這是什麼'\ /日期(-2208967200000-0600)\ /'代表 ? – 2012-07-06 19:09:48

+0

它應該表示日期和時間。 我認爲自1970年1月1日以來,第一個數字是ms。但它太大了,這是2039年的某一天。我會試圖弄清楚它是什麼。第二個數字絕對是一個時區。 – Adrian 2012-07-06 19:45:54

+0

@Adrian:這不是太大 - 它是負面的* ...第二個數字不是時區,它是一個偏移量。時區*在任何時間點給出*偏移量,但不是相反的。我目前的抵消是+01:00,但它不會在十一月...即使我的時區不會改變。 – 2012-07-06 20:29:38

回答

2

您需要的信息,這兩位提取:

  • -2208967200000:自Unix毫秒爲單位(1970年1月1日UTC)
  • -0600:從UTC

這個假設的例子中表示1900年1月1日午夜本地時間偏移 - 作爲-2208967200000部分代表早上6點UTC。

要將其轉換爲Joda時間DateTime,應該提取兩部分(去除括號內的所有內容,然後使用長度將其拆分或找到中間的+/-符號)。

接下來,解析第一部分爲毫秒部分的long。 然後,解析第二部分 - 可能是小時,分鐘和分開簽字。 (我假定它總是形式xHHmm其中x是符號,HH是分鐘爲兩位數字,和mm是小時,因爲兩位數字。)

創建一個固定的時間區,用於使用所述偏移DateTimeZone.forHoursMinutesOffset或類似的東西。

最後,創建

new DateTime(millis, zone); 

哦時間,然後踢誰是製造這樣一種可怕的格式...

0

這個樣子UNIX時間戳

Unix的時間戳是跟蹤時間的運行總計 秒的方式。此計數開始於Unix紀元於1970年1月1日

+0

對我來說看起來不像一個unix時間戳,除非你期望你認爲OP正試圖代表大約68000BC。它看起來非常像從紀元以來的*毫秒*,而且與UTC的偏移量相似。 – 2012-07-06 19:16:58

+0

這是毫秒,當然,但與你的起點我不同意 – 2012-07-06 19:44:24

+0

你是什麼意思的「與你開始點」?你不同意哪個*精確*位?如果以毫秒爲單位,那麼它不是* Unix時間戳,如果你不相信「-0600」是一個偏移量,你認爲它的目的是什麼? – 2012-07-06 20:27:25

0

如果「2208967200000」,是在毫秒的時間自1970年1月1日, ,00:00:00,你可以在Date(time)的構造函數中使用它;

String dateStr="Date(-2208967200000-0600)"; 
String timeInMillis=dateStr.Split("-")[1]; 
String utcStr=dateStr.Split("-")[2].Substring(0,4); 
Date d=new Date(Long.parseLong(timeInMillis)); 

,如果你願意,你可以處理utcStr如果有必要(如果之後的第二部分 「 - 」 是一個時間段)

+0

這個數字不是2208967200000 - 我相信它是-2208967200000。我認爲沒有其他理由可以把它放在前面,並且恰好在1900年1月1日06:00時被視爲否定,這似乎是一個巧合(-0600的偏移量)忽略的巧合。 – 2012-07-06 20:28:35