2011-01-24 131 views
5

我檢索從中出來,在格式的SQLite數據庫中的日期時間時間...格式日期時間字符串只

2011-01-24 02:45:00 

在C#中,我可以僅僅是爲了使用DateTime.Parse("2011-01-24 02:45:00").ToString("HH:mm")得到的字符串02:45

是他們的一種方式我可以在Android/Java中執行此操作嗎?我在我的Android應用程序的代碼看起來像這樣...

// dateStr below is logging as correctly being yyyy-MM-dd HH:mm:ss format 
String dateStr = cursor.getString(cursor.getColumnIndex("start_time")); 
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); 
String shortTimeStr = sdf.format(dateStr); // <-- throws IllegalArgumentException 

編輯:由於雙方doc_180和康斯坦丁波羅夫 - 給予幫助我理清問題的例子。部分問題是我正在導入java.sql.Date而不是java.util.Date。我已經改變了一切,現在它對我來說很完美。

+0

SimpleDateFormat需要日期參數,而不是字符串。您應該將日期存儲爲毫秒並從中創建日期對象。日期d =新日期(dateAsMillisec),然後將其傳遞給simpledateformat。 – 2011-01-24 03:05:02

+0

@ doc_180:好的,對不起,你說得很對 - 可能需要重新思考我的問題。我的問題是我的Android數據庫是基於PC的應用程序的SQLite數據庫的「鏡像」,它使用了長/反向日期時間格式,我想保持格式一致。我嘗試使用Date.parse(String),然後sdf.format(...)但也引發了一個異常。 – Squonk 2011-01-24 03:16:39

+0

你試過我的代碼嗎?它的工作原理和我檢查。 – 2011-01-24 03:30:50

回答

11

你需要做到以下幾點。

try { 
    Date date = null; 
    date = df.parse("2011-01-24 02:45:00"); 
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); 
    String shortTimeStr = sdf.format(date); 
    System.out.println(shortTimeStr); 
} catch (ParseException e) { 
    // To change body of catch statement use File | Settings | File Templates. 
    e.printStackTrace(); 
} 

正如我在評論中提到的,您應該將時間存儲爲毫秒而不是字符串。否則,我沒有看到任何其他方式比創建中間人對象日期。

2

SimpleDateFormat.format在傳遞字符串時需要日期或日曆作爲參數。首先將字符串轉換爲日期。

String dateStr = cursor.getString(cursor.getColumnIndex("start_time")); 
SimpleDateFormat toFullDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
Date fullDate = toFullDate.parse(dateStr); 
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); 
String shortTimeStr = sdf.format(fullDate); 

而且只要在數據庫中,是的,我寧願保存的日期,因此讓那麼一個Date對象會比較瑣碎:

Long dateMilliseconds = cursor.getLong(cursor.getColumnIndex("start_time")); 
Date fullDate = new Date(dateMilliseconds); 
相關問題