簡體   English   中英

在Java中存儲,檢索和比較日期的最佳方法

[英]Best way to store, retrieve, and compare dates in Java

我來自PHP背景。 我很長一段時間以來一直是PHP開發人員。 我想進入Android App開發。 我創建了一個應用程序,但我不覺得我對時間和日期函數有很強的把握,特別是在存儲在數據庫中時。 我的一個主要問題是如何從數據庫(SQLite)存儲和檢索日期並比較它們。

我在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';

?>

任何幫助將不勝感激。

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

java.util.Date對象只是一個long的包裝器,所以大多數都是無意義的,但如果你也喜歡使用Date對象也很容易。 不要與java.sql.Date混淆

然后,您可以比較示例中的時間

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

if (time2 < time1) {

如果您想要,您甚至無需創建Date對象即可獲得unix時間戳:

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

然后你可以像以前一樣簡單地將它寫入MySQL。

SQLite僅支持少數幾種數據類型 ,其中唯一合理的數據類型integer 它可以容納64位數字,因此它適用於Java的long

存儲到DB中時,從java.util.Date獲取毫秒計數(自1970年1月1日起):

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

然后,您可以使用給定的millis輕松地重新創建日期:

long millis = ...
Date date = new Date(millis);

如果您在從數據庫中檢索它們后對時間進行操作,則可能需要查看Joda Time。 它具有大量有用的功能,而標准的Java庫在該領域有點缺乏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM