在Java中存储,检索和比较日期的最佳方法

时间:2012-12-22 15:16:24

标签: java android sqlite date time

我来自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';

?>

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:7)

只需使用原始长度。同一个从System.currentTimeMillis();返回(当前时间)。 它是自1970年以来的毫秒数。它基本上与unix时间相同,但带有有符号的64位值(java长),以毫秒而不是秒为单位。

java.util.Date对象也只是long的一个包装器,所以大多数都是无意义的,但如果你愿意,也很容易使用Date对象。不要与java.sql.Date

混淆

然后,您可以像在示例中一样比较时间

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

if (time2 < time1) {

答案 1 :(得分:2)

如果您愿意,可以在不创建Date对象的情况下获取unix时间戳:

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

然后你可以像以前一样简单地将它写入MySQL。

答案 2 :(得分:1)

SQLite 仅支持datatypes中的少数几个,其中唯一合理的存储时间是integer。它可以容纳 64位数字,因此它适用于Java的long

存储到数据库中时,您从java.util.Date获得毫秒计数(自1970年1月1日起):

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

然后您可以轻松地使用给定的millis重新创建日期:

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

答案 3 :(得分:0)

如果您在从数据库中检索它们后对时间进行操作,则可能需要查看Joda Time。它具有大量有用的功能,而标准的Java库在该领域有点缺乏。