我来自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';
?>
非常感谢任何帮助。
答案 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库在该领域有点缺乏。