我有一個字符串格式爲"\/Date(1339638938087-0500)\/"
從Web服務api。如何在Java中使用格式「/Date(1339638938087-0500) /」解析日期字符串?
使用java,我怎樣才能把這個變成org.joda.time.DateTime
變量?
我有一個字符串格式爲"\/Date(1339638938087-0500)\/"
從Web服務api。如何在Java中使用格式「/Date(1339638938087-0500) /」解析日期字符串?
使用java,我怎樣才能把這個變成org.joda.time.DateTime
變量?
您需要的信息,這兩位提取:
這個假設的例子中表示1900年1月1日午夜本地時間偏移 - 作爲-2208967200000部分代表早上6點UTC。
要將其轉換爲Joda時間DateTime
,應該提取兩部分(去除括號內的所有內容,然後使用長度將其拆分或找到中間的+/-符號)。
接下來,解析第一部分爲毫秒部分的long
。 然後,解析第二部分 - 可能是小時,分鐘和分開簽字。 (我假定它總是形式xHHmm其中x是符號,HH是分鐘爲兩位數字,和mm是小時,因爲兩位數字。)
創建一個固定的時間區,用於使用所述偏移DateTimeZone.forHoursMinutesOffset
或類似的東西。
最後,創建
new DateTime(millis, zone);
哦時間,然後踢誰是製造這樣一種可怕的格式...
這個樣子UNIX時間戳
Unix的時間戳是跟蹤時間的運行總計 秒的方式。此計數開始於Unix紀元於1970年1月1日
對我來說看起來不像一個unix時間戳,除非你期望你認爲OP正試圖代表大約68000BC。它看起來非常像從紀元以來的*毫秒*,而且與UTC的偏移量相似。 – 2012-07-06 19:16:58
這是毫秒,當然,但與你的起點我不同意 – 2012-07-06 19:44:24
你是什麼意思的「與你開始點」?你不同意哪個*精確*位?如果以毫秒爲單位,那麼它不是* Unix時間戳,如果你不相信「-0600」是一個偏移量,你認爲它的目的是什麼? – 2012-07-06 20:27:25
如果「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如果有必要(如果之後的第二部分 「 - 」 是一個時間段)
這個數字不是2208967200000 - 我相信它是-2208967200000。我認爲沒有其他理由可以把它放在前面,並且恰好在1900年1月1日06:00時被視爲否定,這似乎是一個巧合(-0600的偏移量)忽略的巧合。 – 2012-07-06 20:28:35
這是什麼'\ /日期(-2208967200000-0600)\ /'代表 ? – 2012-07-06 19:09:48
它應該表示日期和時間。 我認爲自1970年1月1日以來,第一個數字是ms。但它太大了,這是2039年的某一天。我會試圖弄清楚它是什麼。第二個數字絕對是一個時區。 – Adrian 2012-07-06 19:45:54
@Adrian:這不是太大 - 它是負面的* ...第二個數字不是時區,它是一個偏移量。時區*在任何時間點給出*偏移量,但不是相反的。我目前的抵消是+01:00,但它不會在十一月...即使我的時區不會改變。 – 2012-07-06 20:29:38