2014-06-24 68 views
1

所以,我一直在嘗試這個很長一段時間。我需要將日期和時間保存爲SQLite數據庫中的字符串(DD-MM-YYYY & HH:mm)從SQLite數據庫中獲取日期和時間字符串並設置AlarmManager

現在我必須將我的AlarmManager設置爲顯示通知,但AlarmManager以毫秒爲單位獲取時間和日期。

如何將這些轉換爲毫秒?

什麼是將日期和時間存儲在SQLite DB的正確方法?

回答

1

可以使用的SimpleDateFormat做到這一點:

SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy HH:mm"); 
    String time = "12-01-2014 10:23"; 

    long millis = format.parse(time).getTime(); 

這應該工作。我也有類似的東西,並且我設置了一個額外的列,從數據庫中的這個日期開始保存毫秒,所以我可以直接獲取它。

+0

這不會與「12工作:3日期:2014年9 :58「對嗎?得到一個IlligalArgumentException,認爲我必須做很多工作:( –

+0

爲了更好的理解,你應該閱讀關於SimpleDateFormat http://developer.android.com/reference/java/text/SimpleDateFormat.html。如果你想解析這樣的字符串,你的SimpleDateFormat必須看起來像:(「DD:MM:YYYY HH:mm」) – Opiatefuchs

+0

我認爲這是dd:MM:yyyy HH:mm –

2

這是正確的方式來存儲日期和時間在sqlite?

您可能會發現在SQLite數據庫中使用SQLite的INTEGER數據類型將日期存儲爲毫秒更容易。這使得使用該值非常容易創建Calendar對象或用於創建AlarmManager警報。但是如果您在數據庫中以字符串格式存儲日期,您可能會發現自己正在對其執行字符串操作。

如果您存儲日期在你的數據庫毫秒,這是很容易從它創建一個日曆對象,並提取年,月,日:

// get millis from database 
Calendar cal = Calendar.getInstance(); 
cal.setTimeInMillis(millis); 
int year = cal.get(Calendar.YEAR); 
int month = cal.get(Calendar.MONTH); 
int day = cal.get(Calendar.DAY_OF_MONTH); 

對於存儲時間,我發現最好以「HH:MM」格式將它們存儲爲24小時字符串。 Android的TimePickers以24小時的格式接受和返回小時,所以這只是讓生活更輕鬆。

你仍然需要做一些最起碼的字符串操作擺脫「HH:MM」的int小時和分鐘,但它可以是簡單:

String timeString = "18:30"; 
int hours = Integer.valueOf(timeString.split(":")[0]); 
int minutes = Integer.valueOf(timeString.split(":")[1]); 

但是,如果你願意,你可以即使在米利斯存儲您的時間作爲一個SQLite INTEGER,然後使用該值來創建一個新的Calendar對象並提取小時和分鐘從它:

// get millis from database 
Calendar cal = Calendar.getInstance(); 
cal.setTimeInMillis(millis); 
int hours = cal.get(Calendar.HOUR_OF_DAY); 
int minutes = cal.get(Calendar.MINUTES); 
+0

謝謝..非常有用的信息。這種方式我可以做得更容易..但我幾乎完成了我的應用程序...無論如何感謝這個有價值的信息。 –

+0

當然,沒問題,很高興我能以某種方式幫助。 – JDJ

+0

我們可以用datepicker和timepicker來做它嗎? –

相關問題