Quiero obtener la marca de tiempo actual así: 1320917972
int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts = tsTemp.toString();
Quiero obtener la marca de tiempo actual así: 1320917972
int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts = tsTemp.toString();
Respuestas:
Del blog de desarrolladores:
System.currentTimeMillis()
es el reloj estándar de "pared" (hora y fecha) que expresa milisegundos desde la época. El usuario o la red telefónica pueden configurar el reloj de pared (consulte setCurrentTimeMillis (largo) ), por lo que el tiempo puede saltar hacia atrás o hacia adelante de manera impredecible. Este reloj solo debe usarse cuando la correspondencia con fechas y horas del mundo real es importante, como en una aplicación de calendario o reloj despertador. Las mediciones de intervalo o tiempo transcurrido deben usar un reloj diferente. Si está utilizando System.currentTimeMillis()
, considere la posibilidad de escuchar el ACTION_TIME_TICK
, ACTION_TIME_CHANGED
y ACTION_TIMEZONE_CHANGED
emisiones de intención para saber cuando cambia el tiempo.
System.nanoTime()
es una alternativa System.currentTimeMillis()
y que no tiene fluctuaciones impredecibles, y está diseñada para medir las diferencias de duración.
System.nanoTime()
no es adecuada para mostrar la hora del reloj de pared. Para ese propósito, use System.currentTimeMillis()
en su lugar.
1320917972 es la marca de tiempo de Unix que usa el número de segundos desde las 00:00:00 UTC del 1 de enero de 1970. Puede usar la TimeUnit
clase para la conversión de unidades, de System.currentTimeMillis()
a segundos.
String timeStamp = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
Puede usar la clase SimpleDateFormat :
SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss");
String format = s.format(new Date());
Use el siguiente método para obtener la marca de tiempo actual. Funciona bien para mí.
/**
*
* @return yyyy-MM-dd HH:mm:ss formate date as string
*/
public static String getCurrentTimeStamp(){
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentDateTime = dateFormat.format(new Date()); // Find todays date
return currentDateTime;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
Aquí hay una marca de tiempo legible para humanos que se puede usar en un nombre de archivo, en caso de que alguien necesite lo mismo que yo:
package com.example.xyz;
import android.text.format.Time;
/**
* Clock utility.
*/
public class Clock {
/**
* Get current time in human-readable form.
* @return current time as a string.
*/
public static String getNow() {
Time now = new Time();
now.setToNow();
String sTime = now.format("%Y_%m_%d %T");
return sTime;
}
/**
* Get current time in human-readable form without spaces and special characters.
* The returned value may be used to compose a file name.
* @return current time as a string.
*/
public static String getTimeStamp() {
Time now = new Time();
now.setToNow();
String sTime = now.format("%Y_%m_%d_%H_%M_%S");
return sTime;
}
}
Prueba estos
time.setText(String.valueOf(System.currentTimeMillis()));
y timeStamp a formato de hora
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String dateString = formatter.format(new Date(Long.parseLong(time.getText().toString())));
time.setText(dateString);
Me gustaría contribuir con la respuesta moderna.
String ts = String.valueOf(Instant.now().getEpochSecond());
System.out.println(ts);
Salida cuando se ejecuta justo ahora:
1543320466
Si bien la división por 1000 no será una sorpresa para muchos, hacer sus propias conversiones de tiempo puede ser difícil de leer bastante rápido, por lo que es un mal hábito cuando puede evitarlo.
La Instant
clase que estoy usando es parte de java.time, la API moderna de fecha y hora de Java. Está integrado en las nuevas versiones de Android, API nivel 26 y superior. Si está programando para Android más antiguo, puede obtener el backport, consulte a continuación. Si no quieres hacer eso, comprensiblemente, todavía usaría una conversión incorporada:
String ts = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
System.out.println(ts);
Esto es lo mismo que la respuesta de sealskej. La salida es la misma que antes.
Sí, java.time funciona bien en dispositivos Android más antiguos y más nuevos. Solo requiere al menos Java 6 .
org.threeten.bp
con subpaquetes.java.time
.java.time
se describió por primera vez.java.time
Java 6 y 7 (ThreeTen para JSR-310).Sugiero usar la respuesta de Hits, pero agregando un formato de configuración regional, así es como los desarrolladores de Android recomiendan :
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
return dateFormat.format(new Date()); // Find todays date
} catch (Exception e) {
e.printStackTrace();
return null;
}
Este código es la versión de Kotlin. Tengo otra idea para agregar un entero aleatorio aleatorio en el último dígito para dar tiempo de variación de época.
Versión Kotlin
val randomVariance = (0..100).shuffled().first()
val currentEpoch = (System.currentTimeMilis()/1000) + randomVariance
val deltaEpoch = oldEpoch - currentEpoch
Creo que será mejor usar este kode que depender de la versión de Android 26 o más
java.util.Date
,java.util.Calendar
yTimestamp
ahora están legado, suplantados por los java.time clases. La mayor parte de la funcionalidad java.time se transfiere a Java 6 y Java 7 en el proyecto ThreeTen-Backport . Más adaptado para Android anterior en el proyecto ThreeTenABP . Ver Cómo utilizar ThreeTenABP ... .