¿Convertir fechas enteras / épocas a la marca de tiempo de unix en Java?

Esto se aplica principalmente a android, pero podría ser utilizado en Java. Tengo estos oyentes:

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

¿Cómo puedo convertir int year, month, day, hour, minute; A una estampilla de tiempo unix? ¿Es esto posible sin la clase Date ?

De acuerdo, utilice Calendar entonces, ya que es preferible a Date de todos modos:

 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 no hará ningún cálculo hasta que getTimeMillis() se llame y está diseñado para ser más eficiente que Date .

Estoy asumiendo que usted quiere evitar la sobrecarga de objetos por lo que no estoy sugiriendo ninguna clase de fecha o calendario; Más bien, puede calcular el valor directamente.

Tiempo Unix, o tiempo POSIX, es un sistema para describir puntos en el tiempo, definido como el número de segundos transcurridos desde la hora universal coordinada de la medianoche (UTC) del 1 de enero de 1970, sin contar los segundos de salto. ( Artículo de Wikipedia )

Calcular el número de días desde el 1 de enero de 1970 hasta el año / mes / día elegido y multiplicar por 24 * 3600 , luego agregar la hour * 3600 + minute * 60 para obtener el número de segundos desde 1970-01-01 00:00 hasta La fecha y la hora elegidas.

Existen algoritmos bien conocidos para calcular los días entre las fechas.

Ya que quería tener en cuenta el horario de verano también, junto con la zona horaria local, así que después de buscar horas todas las soluciones posibles, lo que funcionó para mí fue la siguiente:

 int gmtOffset = TimeZone.getDefault().getRawOffset(); int dstOffset = TimeZone.getDefault().getDSTSavings(); long unix_timestamp = (System.currentTimeMillis() + gmtOffset + dstOffset) / 1000; 
  • Android Studio preDexDebug después de agregar jar archivo
  • Intent.setData vs Intent.putExtra
  • ExecutorService parece estar ejecutando el hilo en la interfaz de usuario?
  • API21 nuevo DatePicker ShowWeekNumber Crash
  • Cómo reanudar una descarga interrumpida
  • Icono de imagen en vista de lista expandible en android
  • RxJava / RxBinding: cómo manejar los errores en RxView
  • ¿RecyclerView.ViewHolder siempre tiene que ser una clase interna?
  • Cómo manejar el evento de clic de niño en Expandablelistview en Android?
  • WebView no se desplazará en Android 2.x
  • Cómo agregar nombres de clase y función automáticamente a mi registro
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.