Voglio ottenere il timestamp corrente in questo modo: 1320917972
int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts = tsTemp.toString();
Voglio ottenere il timestamp corrente in questo modo: 1320917972
int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts = tsTemp.toString();
Risposte:
Dal blog degli sviluppatori:
System.currentTimeMillis()
è l'orologio "a parete" standard (ora e data) che esprime millisecondi dall'epoca. L'orologio da parete può essere impostato dall'utente o dalla rete telefonica (vedere setCurrentTimeMillis (long) ), quindi il tempo può saltare all'indietro o in avanti in modo imprevedibile. Questo orologio dovrebbe essere usato solo quando è importante la corrispondenza con le date e gli orari del mondo reale, come in un calendario o un'applicazione per la sveglia. Le misurazioni del tempo trascorso o trascorso dovrebbero usare un orologio diverso. Se si utilizza System.currentTimeMillis()
, prendere in considerazione l'ascolto della ACTION_TIME_TICK
, ACTION_TIME_CHANGED
e ACTION_TIMEZONE_CHANGED
le trasmissioni intento di scoprire quando cambia il tempo.
System.nanoTime()
è un'alternativa System.currentTimeMillis()
e non ha fluttuazioni imprevedibili ed è progettata per misurare le differenze di durata.
System.nanoTime()
non è adatto per visualizzare l'ora dell'orologio da parete. A tale scopo, utilizzare System.currentTimeMillis()
invece.
1320917972 è il timestamp di Unix che utilizza il numero di secondi a partire dalle 00:00:00 UTC del 1 ° gennaio 1970. Puoi usare la TimeUnit
classe per la conversione di unità - da System.currentTimeMillis()
a a secondi.
String timeStamp = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
È possibile utilizzare la classe SimpleDateFormat :
SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss");
String format = s.format(new Date());
Utilizzare il metodo seguente per ottenere il timestamp corrente. Funziona bene per me.
/**
*
* @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;
}
}
Ecco un timestamp leggibile dall'uomo che può essere utilizzato in un nome di file, nel caso in cui qualcuno abbia bisogno della stessa cosa di cui avevo bisogno:
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;
}
}
Prova questi
time.setText(String.valueOf(System.currentTimeMillis()));
e timeStamp al formato dell'ora
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String dateString = formatter.format(new Date(Long.parseLong(time.getText().toString())));
time.setText(dateString);
Vorrei contribuire con la risposta moderna.
String ts = String.valueOf(Instant.now().getEpochSecond());
System.out.println(ts);
Uscita quando si esegue proprio ora:
1543320466
Mentre la divisione per 1000 non sarà una sorpresa per molti, fare le tue conversioni di tempo può essere difficile da leggere abbastanza velocemente, quindi è una cattiva abitudine quando puoi evitarlo.
La Instant
classe che sto usando fa parte di java.time, la moderna API di data e ora di Java. È integrato nelle nuove versioni di Android, API livello 26 e versioni successive. Se stai programmando per Android precedente, potresti ottenere il backport, vedi sotto. Se non vuoi farlo, comprensibilmente, utilizzerei comunque una conversione integrata:
String ts = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
System.out.println(ts);
Questa è la stessa della risposta di sealskej. L'output è lo stesso di prima.
Sì, java.time funziona perfettamente su dispositivi Android più vecchi e più recenti. Richiede solo almeno Java 6 .
org.threeten.bp
con i pacchetti secondari.java.time
.java.time
stato descritto per la prima volta.java.time
Java 6 e 7 (ThreeTen per JSR-310).Suggerisco di utilizzare la risposta di Hits, ma aggiungendo un formato Locale, questo è il modo in cui gli sviluppatori Android consiglia :
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;
}
Questo codice è la versione di Kotlin. Ho un'altra idea per aggiungere un numero casuale casuale nell'ultima cifra per dare tempo di variazione varianza.
Versione di Kotlin
val randomVariance = (0..100).shuffled().first()
val currentEpoch = (System.currentTimeMilis()/1000) + randomVariance
val deltaEpoch = oldEpoch - currentEpoch
Penso che sarà meglio usare questo kode quindi dipendere dalla versione 26 o più di Android
java.util.Date
,java.util.Calendar
eTimestamp
ora sono l'eredità, soppiantato dai java.time classi. La maggior parte della funzionalità java.time è trasferita su Java 6 e Java 7 nel progetto ThreeTen-Backport . Ulteriore adattamento per Android precedente nel progetto ThreeTenABP . Vedi Come usare ThreeTenABP… .