Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert integer dates/times to unix timestamp in Java?

This mainly applies to android, but could be used in Java. I have these listeners:

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

How could I convert int year, month, day, hour, minute; to a unix timestamp? Is this possible without the Date class?

like image 912
Mohit Deshpande Avatar asked Nov 30 '22 17:11

Mohit Deshpande


2 Answers

Okay, use Calendar then, since that's preferred to Date anyway:

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 won't do any computations until getTimeMillis() is called and is designed to be more efficient than Date.

like image 130
Jerry Brady Avatar answered Dec 02 '22 07:12

Jerry Brady


I'm assuming you want to avoid object overhead so I'm not suggesting any Date or Calendar classes; rather, you can calculate the value directly.

Unix time, or POSIX time, is a system for describing points in time, defined as the number of seconds elapsed since midnight Coordinated Universal Time (UTC) of January 1, 1970, not counting leap seconds. (Wikipedia article)

Calculate the number of days from Jan 1 1970 to the chosen year/month/day and multiply that by 24 * 3600, then add hour * 3600 + minute * 60 to get the number of seconds from 1970-01-01 00:00 to the chosen date and time.

There are well known algorithms for calculating the days between dates.

like image 38
Stephen P Avatar answered Dec 02 '22 08:12

Stephen P