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

好的,然后使用 Calendar ,因为无论如何它都比 Date 更受欢迎:

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 年 1 月 1 日 00: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 回答