在Java中将整数日期/时间转换为unix时间戳?
这主要适用于android,但也可以用于Java。我有这些听众:在Java中将整数日期/时间转换为unix时间戳?,java,android,datetime,unix-timestamp,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() {
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;
}
};
我如何转换
整数年、月、日、时、分代码>到unix时间戳?如果没有日期
类,这可能吗?我假设您希望避免对象开销,因此我不建议使用任何日期或日历类;相反,您可以直接计算值
Unix时间或POSIX时间是一种描述时间点的系统,定义为自1970年1月1日协调世界时(UTC)午夜以来经过的秒数,不包括闰秒。()
计算从1970年1月1日到所选年/月/日的天数,并将其乘以24*3600
,然后加上hour*3600+minute*60
,得到从1970-01-01 00:00到所选日期和时间的秒数
计算日期之间的天数是众所周知的。好吧,那就用日历吧,因为日历比日期更合适:
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
更有效,因为我也想考虑夏令时和本地时区,所以在搜索了几个小时所有可能的解决方案后,对我有效的方法如下:
int gmtOffset = TimeZone.getDefault().getRawOffset();
int dstOffset = TimeZone.getDefault().getDSTSavings();
long unix_timestamp = (System.currentTimeMillis() + gmtOffset + dstOffset) / 1000;
为什么不想使用date类?为了避免此处所述的日期对象创建:如果没有用户的区域设置,则不可能!(我想您在android中是这样做的,但是对于一般的java扩展,您在示例中没有足够的信息来做这件事。)c.set(年、月、日、小时、分钟、0);也工作吗?因为Calendar还有一种方法,它需要一年、一个月、一天、一天中的一小时、一分钟和一秒。它不仅可以工作,而且效率更高,所以使用相同的方法调用设置它们会更好。那么GregorianCalendar呢?它会比Calendar更有效吗?@JerryBrady它如何更有效?