2

我来自 PHP 背景。很长一段时间以来,我一直是一名 PHP 开发人员。我想跳入 Android 应用程序开发。我创建了一个应用程序,但我不觉得我对时间和日期功能有很强的把握,尤其是在存储在数据库中时。O 我主要关心的一个问题是如何从数据库(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

4 回答 4

7

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

java.util.Date对象也只是 a 的包装器,long所以如果你也喜欢的话,大多数情况下是没有意义的,但很容易与 Date 对象一起使用。不要混淆java.sql.Date

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

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

if (time2 < time1) {
于 2012-12-22T15:18:08.587 回答
2

如果您愿意,甚至无需创建 Date 对象即可获得 unix 时间戳:

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

然后你可以简单地将它写入 MySQL,就像你习惯的那样。

于 2012-12-22T15:18:20.647 回答
1

SQLite仅支持少数几种数据类型,其中唯一适合存储时间的数据类型是integer. 它最多可以容纳64 位数字,因此它适用于 Java 的long.

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

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

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

long millis = ...
Date date = new Date(millis);
于 2012-12-22T15:36:50.547 回答
0

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

于 2012-12-22T15:36:41.790 回答