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