2015-02-24 81 views
0

我有存儲在String領域SQLITE與字符串值安卓GETDATE

"/Date(1411472160000+0100)/" 

我如何轉換這回一個date format日期,下面的代碼無法正常工作。我想我需要先從毫秒轉換,但我不知道如何將上述文本轉換爲長格式?

有什麼建議嗎?

Date convertedDate = new Date(); 
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm",   
java.util.Locale.getDefault()); 
convertedDate = dateFormat.parse(dateString);  
return dateFormat.format(convertedDate); 
+0

這真的是字符串嗎?我的意思是,包含「/ Date」? – Opiatefuchs 2015-02-24 10:29:26

+0

是/包含日期 – 2015-02-24 10:38:04

+0

對於解析,您可以使用@ AxelH的答案並將此解析值轉換爲日期對象,您可以參考我的答案。 – 2015-02-24 10:40:34

回答

3

好了,indexOf("(")indexOf("+"),你應該找到在的日期。

從那裏,我相信你可以找到爲止;)

String s = "/Date(1411472160000+0100)/"; 
    s = s.substring(s.indexOf("(") + 1, s.indexOf("+")); 
    Date d = new Date(Long.parseLong(s)); 

具有相同的結構,你可以找到timezone (+0100) (from "+" to ")")並與日曆一起找出合適的時機區域合適的時間。

+0

感謝這對我工作 – 2015-02-24 10:46:41

+0

@Rachael M,你接受答案&你的問題方向指的是兩個不同的方向。然而,它很好地知道你的問題解決了。歡呼:) – 2015-02-24 10:50:51

+0

不客氣。請求以毫秒爲單位存儲日期,並在其他字段中存儲時區;) – AxelH 2015-02-24 10:52:58

3

首先,您必須從字符串中解析出時間值,即「1411472160000 + 0100」部分。

這裏在「1411472160000 + 0100」中,「+0100」是時區信息。如果你不想考慮時區,那麼你可以採取以下方法。

方法-1

long timestamp = 1245613885; 
Calendar calendar = Calendar.getInstance(); 
calendar.setTimeZone(TimeZone.getDefault()); 
calendar.setTimeInMillis(timestamp * 1000); 

int year = calendar.get(Calendar.YEAR); 
int day = calendar.get(Calendar.DATE); 
int hour = calendar.get(Calendar.HOUR_OF_DAY); 
int minute = calendar.get(Calendar.MINUTE); 

然後讓你指定的格式,你可以使用 -

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
String dateString = sdf.format(calendar.getTime()); 
System.out.println(dateString); // 2009-06-21 15:51:25 

除了這種方法,迄今爲止,沒有一個優秀的Java日期庫調用JodaTime。 如果你想加入時區信息,你可以從JodaTime引用這個構造函數。

http://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html#DateTime-long-org.joda.time.DateTimeZone-