¿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
?
- Falta gradlew en el proyecto generado de android
- Intención no se abre en el siguiente código
- ¿Qué hay de malo en este método de cálculo inSampleSize para Bitmaps? Sin memoria
- Necesita una imagen seleccionando el código de la cámara y la galería - trabajando para todos los teléfonos android
- ¿Por qué no se llama a UtteranceProgress Listener a Text to Speach?
- Fragmento implementando AsyncTask y Listview en android
- Error de Android Studio FloatingActionButton
- Cómo comunicarse con el dispositivo OBD-II
- Cómo convertir la siguiente cadena en objeto de fecha o de calendario en Java?
- Cómo borrar el historial visitado (CSS) de un WebView de Android?
- ¿Puedo usar setContentView fuera del método oncreate?
- Método Android con prioridad (paquete) visibilidad sobreestablecimiento (no debería funcionar, pero sí, ¿por qué?)
- Android / Java: convierte cualquier cadena en color (hexadecimal)
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;
- Determinar si la Actividad es llamada por una Notificación
- Android: pestañas en la parte inferior de la pantalla