2012-12-22 54 views
2

我來自PHP背景。我現在已經是PHP開發人員很長一段時間了。我想跳入Android應用程序開發。我創建了一個應用程序,但我不覺得對時間和日期函數有很好的掌握,尤其是當存儲在數據庫中時。我的主要擔心之一是如何從數據庫中存儲和檢索日期(SQLite)並進行比較。在Java中存儲,檢索和比較日期的最佳方法

我在PHP中的做法是我很簡單;我使用time()函數,該函數爲當前時間創建一個unix時間戳,然後將其作爲整數存儲在MySQL數據庫中。由於MySQL的日期函數,這使得事情變得非常簡單和容易,並且可以通過PHP以整數方式輕鬆檢索和比較日期。

所以基本上,我想知道什麼是最好的解決方案是Java。當我爲未來的Android應用程序創建,存儲,檢索和比較日期時,您推薦我做些什麼?

這裏是PHP代碼,我會用,也許這會給別人一個更好的想法的一個例子,我已經習慣了什麼,什麼我在尋找:

Database structure: 
`id` (int) auto increment 
`username` (varchar) 
`the_date` (int) 

<?php 

$username = 'scarhand77'; 
$the_date = time(); 

// insert into database 

mysql_query("insert into `stack_overflow` (`username`, `the_date`) values ('$username', '$the_date')"); 

// retrieve from database 

$user_date = mysql_result(mysql_query("select `the_date` from `stack_overflow` where `username`='$username'"), 0); 

// compare $user_date, see if its older than right now 

if ($user_date < time()) 
    echo 'it is older'; 
else 
    echo 'it is not older'; 

?> 

任何幫助將不勝感激。

回答

6

只要使用一個原始長。從System.currentTimeMillis();返回的同一個(當前時間)。 這是自1970年以來的毫秒數。它基本上與unix時間相同,但帶有一個帶符號的64位值(java long),以毫秒爲單位而不是秒。

A java.util.Date對象也只是一個圍繞long的包裝,所以如果你喜歡的話,它也是毫無意義的,但很容易與Date對象一起使用。不要與java.sql.Date

然後,您可以比較的時間,就像在你的例子混淆

long time1 = System.currentTimeMillis(); 
long time2 = ...; 

if (time2 < time1) { 
1

你可以得到一個UNIX時間戳,甚至沒有創建一個Date對象,如果你想:

long unixTime = System.currentTimeMillis()/1000L; 

然後,您可以簡單地將它寫入MySQL,就像您習慣的那樣。

+0

你爲什麼除以1000L?我假設這是把它變成秒而不是毫秒。不知道我想要那樣。 – scarhand

+3

由於unixtime是自紀元以來的秒數,而不是毫秒。 –

+0

啊,我現在明白了。 – scarhand

0

如果您在從數據庫中檢索出時間之後正在使用時間進行操作,則可能需要查看Joda Time。它具有大量有用的功能,而標準的Java庫在這方面有點欠缺。

1

SQLite僅支持datatypes的幾個,其中唯一合理的用於存儲時間的是integer。它最多可以容納64位號碼,所以它可以很好地與Java的long配合使用。

當存儲到數據庫,您將獲得從java.util.Date毫秒數(自1/1/1970)有:

Date now = new Date(); 
long millis = now.getTime(); 

然後你輕鬆地重新創建一個日期與給定米利斯:

long millis = ... 
Date date = new Date(millis); 
相關問題