我得到了下面的日期格式,我從一個API得到(是的,我試圖讓他們改變API ... dailywtf故事):奇怪的日期格式的Java日期
\/Date(1310481956000+0200)\/
我怎麼能轉換這成一個Java日期? (java.util.Date)
這來自.NET JSON Web服務。
我得到了下面的日期格式,我從一個API得到(是的,我試圖讓他們改變API ... dailywtf故事):奇怪的日期格式的Java日期
\/Date(1310481956000+0200)\/
我怎麼能轉換這成一個Java日期? (java.util.Date)
這來自.NET JSON Web服務。
不知道日期/時間字符串代表什麼,讓我猜測。
1310481956000
看起來是在紀元後的毫秒,而+0200
是相對於GMT的偏移量。
下面的代碼似乎表明它還有:
final TimeZone tz = TimeZone.getTimeZone("GMT+0200");
final Calendar cal = Calendar.getInstance(tz);
cal.setTimeInMillis(1310481956000L);
final SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
f.setTimeZone(tz);
System.out.println(f.format(cal.getTime()));
打印2011-07-12 16:45:56 GMT+02:00
我已將日期轉換爲字符串'「MM/dd/yyyy」'格式。我想將轉換後的日期解析爲Java.util.Date格式的「MM/dd/yyyy」格式。但輸出格式更改爲「2011-07-12 16:45:56 GMT + 02:00」格式。我想保持目前的格式(「MM/dd/yyyy」)。但需要Java.util.Date **不是STRING **。任何幫助請... – vissu
@vissu pepala Java中的日期在內部只是整數,默認的日期輸出格式完全依賴於系統/語言環境。如果您想以特定格式輸出日期,請使用上面的SimpleDateFormat指定格式。 –
如何將其轉換爲Java日期? (java.util.Date)
首先,獲取「他們」以清楚準確地告訴您日期格式的含義。 (如果他們不會或不能猜到,請參閱下面的內容)
接下來編寫一個自定義分析器來解析字符串並提取信息內容。
最後,將信息內容轉換爲與Date
構造函數中的一個匹配的表單並創建一個實例。
我的猜測是,1310481956000
部分是由於UNIX紀元(1970/01/01T00:00)的毫秒數(?MET),並且所述0200
表示時區2小時抵消。但是,你不應該依賴猜測。獲取「他們」給你的規範,或至少一些例子和他們對應的實際時間/時區。
你必須瞭解從API提供的格式,但它似乎是時間epoch +偏移區域。要轉換它,你可以嘗試。
final String fromAPI = "1310481956000+0200"
final String epochTime = fromAPI.substring(0, fromAPI.indexOf("+"));
final String timeZoneOffSet = fromAPI.substring(fromAPI.indexOf("+"), fromAPI.size());
Date date = new Date(Long.parseLong(epochTime));
請注意,我沒有做任何事情與時區(如果那是它是什麼)。你必須處理,但這應該讓你走上正確的道路。
Instant.ofEpochMilli(
java.lang.Long.parseLong("1310481956000")
).atOffset(ZoneOffset.of("+0200"))
的accepted Answer是正確的,但已經過時。處理這個問題的現代方法是通過java.time類。
輸入不明確。是從1970年第一個時間點的UTC 1970-01-01T00:00:00:Z
的第一個日期時間的Unixepoch reference算起,然後在UTC之前兩個小時進行調整?如果是這樣,這裏看到的這個示例代碼有效。
首先將輸入號碼解析爲Instant
。 Instant
類表示UTC中時間軸上的一個時刻,分辨率爲nanoseconds(小數點後最多九(9)位數字)。
提取字符串的第一部分並解析爲long
。
long millisSinceEpoch = java.lang.Long.parseLong("1310481956000");
Instant instant = Instant.ofEpochMilli(millisSinceEpoch);
instant.toString():2011-07-12T14:45:56Z
提取您的字符串的最後部分,並解析爲ZoneOffset
。
ZoneOffset offset = ZoneOffset.of("+0200");
將偏移到Instant
得到一個OffsetDateTime
。
OffsetDateTime odt = instant.atOffset(offset);
odt.toString():2011-07-12T16:45:56 + 02:00
注意,一個offset-from-UTC不是一個時區。區域是偏移量加一組處理異常的規則,如Daylight Saving Time (DST)。
儘可能避開java.util.Date
。但是如果你必須使用一個,你可以轉換爲java.time。尋找新的轉換方法添加到舊的類。
java.util.Date d = java.util.Date.from(odt.toInstant());
d.toString():星期二07月12 14點45分56秒GMT 2011
參見live code at IdeOne.com覆蓋該整個例子。
的java.time框架是建立在Java 8和更高版本。這些類取代了日期時間類legacy,如java.util.Date
,Calendar
,& SimpleDateFormat
。
Joda-Time項目現在位於maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310。
從何處獲取java.time類?
的ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval
,YearWeek
,YearQuarter
和more。
該格式首先代表什麼?它是如何工作的?它是時間戳嗎? –
我認爲這種格式在某些.NET服務中用於JSON。 – Jonas