16

UNIXタイムスタンプを使用してデータベースに時刻/日付を保存しています。次に、特定の日にすべてのインスタンスを取得したいので、データベースにクエリを実行するために、その日の開始のタイムスタンプを計算する必要があります。

日付オブジェクトから日/月/年の値を mktime に渡し、時間と分をゼロに設定することで、php で同様のことを行いました。Java/Android には、これに類似した関数はないようです (日付の特定の部分を取得する関数は非推奨です)。

誰でもこれに関するガイダンスを提供できますか? ありがとう

編集:

わかりましたので、これが機能する可能性があることに気付きました:

public static int startOfDay(Timestamp time) {
        Calendar cal = dateToCalendar(new Date(time.getTime()));
        cal.add(Calendar.HOUR_OF_DAY, -Calendar.HOUR_OF_DAY);
        cal.add(Calendar.MINUTE, -Calendar.MINUTE);
        cal.add(Calendar.SECOND, -Calendar.SECOND);
        Log.i("Time", cal.getTime().toString());        
        return (int) cal.getTimeInMillis()/1000;
}

ただし、これを実行したところ、次のようになりました。

2012 年 12 月 15 日(土)01:24:00 GMT

秒は正しいのに、時と分が違う??

4

3 に答える 3

47

時間を扱うときは、常にタイム ゾーンを考慮する必要があります。データベースのタイムスタンプは、常に 1 つのタイム ゾーン (UTC など) で保存する必要があります。次に、計算では、ユーザーが異なるタイム ゾーンにいる可能性があり、タイム ゾーンを変更できることを考慮する必要があります。

ユーザーが現在電話で設定しているタイムゾーンで一日の始まりを計算したい場合。Calendar以下を使用してインスタンスを作成します。

Calendar cal = Calendar.getInstance(); 

特定のタイム ゾーンのインスタンスを取得するには、次を使用します。

// use UTC time zone
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));

次に、1 日の始まりを設定します。

cal.setTime(time); // compute start of the day for the timestamp
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
于 2012-12-15T13:12:29.260 に答える
9
public static int startOfDay(Timestamp time) {
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(time.getTime());
    cal.set(Calendar.HOUR_OF_DAY, 0); //set hours to zero
    cal.set(Calendar.MINUTE, 0); // set minutes to zero
    cal.set(Calendar.SECOND, 0); //set seconds to zero
    Log.i("Time", cal.getTime().toString());        
    return (int) cal.getTimeInMillis()/1000;
}
于 2012-12-15T12:48:15.420 に答える
5
于 2016-08-27T22:56:57.987 に答える