2

私はPHPのバックグラウンドを持っています。私は長い間PHP開発者です。Androidアプリの開発に飛び込みたいです。1つのアプリを作成しましたが、特にデータベースに保存されている場合、日時関数を十分に把握しているとは思えません。私の主な関心事の1つは、データベース(SQLite)から日付を保存および取得し、それらを比較する方法です。

PHPでそれを行う方法は単純です。現在の時刻のUNIXタイムスタンプを作成する関数を使用しtime()、それを整数として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

プリミティブlongを使用するだけです。System.currentTimeMillis();同じものが(現時点で)から戻ってきました。これは、1970年からのミリ秒数です。これは、基本的にUNIX時間と同じですが、符号付き64ビット値(java long)を使用し、秒単位ではなくミリ秒単位です。

java.util.Dateオブジェクトも単なるラッパーであるため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

DBに保存する場合、次のコマンドからミリ秒カウント(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

データベースから時刻を取得した後で時刻を操作している場合は、JodaTimeを確認することをお勧めします。非常に多くの便利な機能がありますが、標準のJavaライブラリにはこの領域が少し欠けています。

于 2012-12-22T15:36:41.790 に答える