android.text.format.time.tomillisの挿入問題sqlite db on droidのsqlite dbに挿入します

StackOverflow https://stackoverflow.com/questions/2703174

  •  01-10-2019
  •  | 
  •  

質問

Android OSのアプリを書いています。SQLiteDBに時間の値を保存する必要があります。 Android.text.format.timeを使用してアプリに時間値を保存し、値をMillisとしてDBに実際の値として挿入しています。 SDKエミュレーターでは、すべてが完全に機能します。唯一の携帯電話では、アプリ(これまでのところ)をテストする機会がありましたが、期間コードは予想通りには機能しません。関連するコード:

private static final String DATABASE_CREATE =
    "create table " + DATABASE_TABLE + " ("
     + KEY_ROWID + " integer primary key autoincrement, "
     + KEY_START + " REAL, "
     + KEY_STOP + " REAL, "
     + KEY_DUR + " REAL );";

...

private SQLiteDatabase mDb;
ContentValues timerValues = new ContentValues();

...

timerValues.put(KEY_START, stime.toMillis(false));
timerValues.put(KEY_STOP, etime.toMillis(false));
timerValues.put(KEY_DURATION, stime.toMillis(false)-etime.toMillis(false));
int result = mDb.insert(DATABASE_TABLE, null, timerValues);

このデータを、Code.set.set(Long Millis)を使用して、わずかに異なるコードを使用して、わずかに異なるコードを使用して2つの別々の関数から引き出します。私は期間の計算について何かが足りないのですか、それともこの特定のドロイドについて「特別な」何かがあるように思えますか?月曜日に別のドロイドをテストする必要がありますが、どんなアイデアも感謝しています。

役に立ちましたか?

解決 2

この問題は、実際には、電話のタイムゾーン設定によって引き起こされることが判明しました。 Time.tomillisは、UTCのエポックからミリ秒として時間をエクスポートするようです。時間を使用して時間を設定する場合(長いミリ)、時間はミリスがEpoch、UTCからミリ秒であると想定しています。その後、time.format( "%t")を要求すると、時間はHH:MM:SS文字列をローカルTZに調整します。これは、時間を測定するために時間を使用していない限り理にかなっています。その場合、TZ調整を考慮するためにある程度の努力を使用する必要があります。だから、私が発生した時間である20分であると思っていたのは、エポック(MSTまたはGMT-7)の前日に17:20:00として時間によって表されることが判明しました。素敵な小さな文書化されていない行動。

私のアプリケーションでは、Millisecondsへの変換を適切な文字列に処理するために、シンプルなユーティリティクラスを作成することを選択しました。私のGoogle-Fuが関連するものが何もないことを明らかにしたので、この投稿が他の誰かに頭痛を救うことを願っています。

他のヒント

列名に関するカリー氏のメモに加えて、なぜあなたが宇宙保管を無駄にしているのかという問題があります KEY_DURATION そもそも。から計算できます KEY_STARTKEY_STOP:

SELECT start, stop, dur=stop-start FROM whatever

また、 android.text.format.Time 2番目の精度のみがあるため、ミリ秒が必要な場合は、そのクラスを使用しないでください。

それらのいずれも助けや適切とみなされない場合は、あなたが入れている値を記録してみてください KEY_DURATION, 、問題があなたの計算にあるかどうか、またはそれがどのように保存されているかを確認します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top