2012-08-16 194 views
-3

Android:我將共享首選項中的日期保存爲字符串。從字符串獲取日期格式

Date now = new Date(new Date().getTime()); 
savePreferences(key, "" + now); 

我想從字符串中取回日期格式,怎麼做?

+0

你的意思,你要恢復的,你有字符串的日期格式? – Elchin 2012-08-16 08:38:20

回答

1

我假設你正在使用java.util.Date它被廢棄了。您應該使用GregorianCalendar,然後使用getTimeInMillis()將其保存爲長。

這使得使用起來更容易。 :-)

+0

實際上java.util.Date並沒有被完全棄用,只有它的幾個方法。儘管如此,你應該避免java.util.Date/Calendar類。而是使用Joda-Time或Java 8的新java.time。*類。 – 2013-12-27 07:06:56

2

試試這個功能。

public static Date convertStringToDate(String startDate) throws ParseException 
{ 
    String myFormatString = // Your stored date format like "dd-mm-yyyy" 
    SimpleDateFormat df = new SimpleDateFormat(myFormatString); 
    Date startingDate = df.parse(startDate); 
    return startingDate; 
} 

將毫秒轉換爲日期。

long yourmilliseconds = 1119193190; 
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm"); 

Date resultdate = new Date(yourmilliseconds); 
System.out.println(sdf.format(resultdate)); 
+0

getTime()以毫秒值的形式返回Date。我怎樣才能從字符串中獲得毫秒值? – user1471575 2012-08-16 08:17:22

+0

你可以使用Long.parseLong(string)來解析你的字符串毫秒。 – 2012-08-16 08:19:34

0

您在Date實例上隱式調用toString方法。不幸的是,該類使用糟糕的格式來渲染字符串。一個主要問題是使用既不標準也不唯一的3字母時區代碼(有重複的例如EST和IST)。應該避免輸出。

事實上,應該避免所有java.util.Date/Calendar類。相反,請使用Joda-Time或Java 8的新java.time.* classes

此外,其他答案建議寫入自紀元以來的毫秒數。你可以這樣做,但它是不明確的。什麼時代?有不止一個,儘管Unix紀元很常見,並且確實被java.util.Date和Joda-Time使用。這個數字是什麼時間單位?舊的Unix風格存儲秒數,而java.util.Date和Joda-Time使用毫秒,新的Java 8 java.time *類使用納秒。

明確的方法是存儲ISO 8601格式的字符串,最好是UTC(無時區偏移量)。然後在運行時的用戶界面中,根據需要轉換爲其他格式和其他時區。

String string = new DateTime(DateTimeZone.UTC).toString(); 

要獲得...

string: 2013-12-27T07:15:00.395Z