所以,我一直在嘗試這個很長一段時間。我需要將日期和時間保存爲SQLite
數據庫中的字符串(DD-MM-YYYY & HH:mm)
。從SQLite數據庫中獲取日期和時間字符串並設置AlarmManager
現在我必須將我的AlarmManager
設置爲顯示通知,但AlarmManager以毫秒爲單位獲取時間和日期。
如何將這些轉換爲毫秒?
什麼是將日期和時間存儲在SQLite DB
的正確方法?
所以,我一直在嘗試這個很長一段時間。我需要將日期和時間保存爲SQLite
數據庫中的字符串(DD-MM-YYYY & HH:mm)
。從SQLite數據庫中獲取日期和時間字符串並設置AlarmManager
現在我必須將我的AlarmManager
設置爲顯示通知,但AlarmManager以毫秒爲單位獲取時間和日期。
如何將這些轉換爲毫秒?
什麼是將日期和時間存儲在SQLite DB
的正確方法?
可以使用的SimpleDateFormat做到這一點:
SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy HH:mm");
String time = "12-01-2014 10:23";
long millis = format.parse(time).getTime();
這應該工作。我也有類似的東西,並且我設置了一個額外的列,從數據庫中的這個日期開始保存毫秒,所以我可以直接獲取它。
這是正確的方式來存儲日期和時間在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);
謝謝..非常有用的信息。這種方式我可以做得更容易..但我幾乎完成了我的應用程序...無論如何感謝這個有價值的信息。 –
當然,沒問題,很高興我能以某種方式幫助。 – JDJ
我們可以用datepicker和timepicker來做它嗎? –
這不會與「12工作:3日期:2014年9 :58「對嗎?得到一個IlligalArgumentException,認爲我必須做很多工作:( –
爲了更好的理解,你應該閱讀關於SimpleDateFormat http://developer.android.com/reference/java/text/SimpleDateFormat.html。如果你想解析這樣的字符串,你的SimpleDateFormat必須看起來像:(「DD:MM:YYYY HH:mm」) – Opiatefuchs
我認爲這是dd:MM:yyyy HH:mm –