Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中将整数日期/时间转换为unix时间戳?_Java_Android_Datetime_Unix Timestamp - Fatal编程技术网

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

在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() {

这主要适用于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;
        }
    };

我如何转换
整数年、月、日、时、分到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它如何更有效?