4

これは主に Android に適用されますが、Java でも使用できます。私はこれらのリスナーを持っています:

int year, month, day, hour, minute;
// the callback received when the user "sets" the date in the dialog
private DatePickerDialog.OnDateSetListener mDateSetListener =
        new DatePickerDialog.OnDateSetListener() {

            public void onDateSet(DatePicker view, int year, 
                                  int monthOfYear, int dayOfMonth) {
                year = year;
                month = monthOfYear;
                day = dayOfMonth;
            }
        };
// the callback received when the user "sets" the time in the dialog
private TimePickerDialog.OnTimeSetListener mTimeSetListener =
    new TimePickerDialog.OnTimeSetListener() {
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            hour = hourOfDay;
            minute = minute;
        }
    };

int year, month, day, hour, minute;UNIXタイムスタンプに変換するにはどうすればよいですか? Dateこれはクラスなしで可能ですか?

4

3 に答える 3

20

いずれにせよ、Date よりも Calendar を使用することをお勧めします。

int componentTimeToTimestamp(int year, int month, int day, int hour, int minute) {

    Calendar c = Calendar.getInstance();
    c.set(Calendar.YEAR, year);
    c.set(Calendar.MONTH, month);
    c.set(Calendar.DAY_OF_MONTH, day);
    c.set(Calendar.HOUR, hour);
    c.set(Calendar.MINUTE, minute);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MILLISECOND, 0);

    return (int) (c.getTimeInMillis() / 1000L);
}

Calendar は が呼び出されるまで計算を実行せず、getTimeMillis()より効率的になるように設計されていますDate

于 2011-01-12T21:42:02.077 に答える
1

オブジェクトのオーバーヘッドを避けたいと想定しているので、DateクラスやCalendarクラスは提案していません。むしろ、値を直接計算できます。

Unix時間(POSIX時間)は、うるう秒を数えずに、1970年1月1日の協定世界時(UTC)の真夜中から経過した秒数として定義される時点を記述するためのシステムです。(ウィキペディアの記事

1970年1月1日から選択した年/月/日までの日数を計算し24 * 3600、それに掛けてhour * 3600 + minute * 60から、1970-01-0100:00から選択した日時までの秒数を取得します。

日付間の日数を計算するためのよく知られたアルゴリズムがあります。

于 2011-01-12T21:33:09.350 に答える
0

ローカルタイムゾーンとともに夏時間も考慮したかったので、考えられるすべての解決策を何時間も検索した後、私にとってうまくいったのは次のとおりです。

int gmtOffset = TimeZone.getDefault().getRawOffset();
        int dstOffset = TimeZone.getDefault().getDSTSavings();
        long unix_timestamp = (System.currentTimeMillis() + gmtOffset + dstOffset) / 1000;
于 2013-06-09T13:41:16.837 に答える