在Java中将整数日期/时间转换为unix时间戳?

时间:2011-01-12 21:18:20

标签: java android datetime unix-timestamp

这主要适用于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类吗?

3 个答案:

答案 0 :(得分:19)

好的,然后使用日历,因为无论如何都优先考虑日期:

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);
}

在调用getTimeMillis()之前,日历不会进行任何计算,并且旨在提高Date的效率。

答案 1 :(得分:1)

我假设你想避免对象开销,所以我不建议任何Date或Calendar类;相反,您可以直接计算该值。

  

Unix时间或POSIX时间是用于描述时间点的系统,定义为自1970年1月1日午夜协调世界时(UTC)以来经过的秒数,不计算闰秒。 (Wikipedia article

计算从1970年1月1日到所选年/月/日的天数,并乘以24 * 3600,然后添加hour * 3600 + minute * 60以获取1970-01-01 00之间的秒数:00到选定的日期和时间。

众所周知algorithms用于计算日期之间的天数。

答案 2 :(得分:0)

由于我想同时考虑夏令时以及当地时区,所以在搜索了所有可能的解决方案后,对我有用的内容如下:

int gmtOffset = TimeZone.getDefault().getRawOffset();
        int dstOffset = TimeZone.getDefault().getDSTSavings();
        long unix_timestamp = (System.currentTimeMillis() + gmtOffset + dstOffset) / 1000;