Quero obter o timestamp atual assim: 1320917972
int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts = tsTemp.toString();
Quero obter o timestamp atual assim: 1320917972
int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts = tsTemp.toString();
Respostas:
A solução é :
Long tsLong = System.currentTimeMillis()/1000;
String ts = tsLong.toString();
Do blog de desenvolvedores:
System.currentTimeMillis()
é o relógio "de parede" padrão (hora e data) que expressa milissegundos desde a época. O relógio de parede pode ser definido pelo usuário ou pela rede telefônica (consulte setCurrentTimeMillis (long) ), para que o tempo possa retroceder ou avançar imprevisivelmente. Este relógio deve ser usado apenas quando a correspondência com datas e horários do mundo real for importante, como em um aplicativo de calendário ou despertador. As medições de intervalo ou tempo decorrido devem usar um relógio diferente. Se você estiver usando System.currentTimeMillis()
, considere ouvindo o ACTION_TIME_TICK
, ACTION_TIME_CHANGED
e ACTION_TIMEZONE_CHANGED
Intenção transmissões para saber quando muda o tempo todo.
System.nanoTime()
é uma alternativa System.currentTimeMillis()
e não possui flutuações imprevisíveis, e foi desenvolvido para medir diferenças de duração.
System.nanoTime()
não é adequada para exibir a hora do relógio de parede. Para esse fim, use em seu System.currentTimeMillis()
lugar.
1320917972 é o registro de data e hora do Unix, usando o número de segundos desde 00:00:00 UTC em 1 de janeiro de 1970. Você pode usar a TimeUnit
classe para conversão de unidades - de System.currentTimeMillis()
para segundos.
String timeStamp = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
Você pode usar a classe SimpleDateFormat :
SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss");
String format = s.format(new Date());
Use o método abaixo para obter o carimbo de data / hora atual. Isso funciona bem para mim.
/**
*
* @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;
}
}
Aqui está um registro de data e hora legível por humanos que pode ser usado em um nome de arquivo, caso alguém precise da mesma coisa que eu precisava:
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;
}
}
Tente esse
time.setText(String.valueOf(System.currentTimeMillis()));
e timeStamp para formato de hora
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String dateString = formatter.format(new Date(Long.parseLong(time.getText().toString())));
time.setText(dateString);
Eu gostaria de contribuir com a resposta moderna.
String ts = String.valueOf(Instant.now().getEpochSecond());
System.out.println(ts);
Saída ao executar agora:
1543320466
Embora a divisão por 1000 não seja uma surpresa para muitos, é difícil ler muito rapidamente as conversões de tempo, por isso é um mau hábito entrar quando você pode evitá-lo.
A Instant
classe que estou usando faz parte do java.time, a moderna API de data e hora do Java. Está integrado em novas versões do Android, API nível 26 e superior. Se você estiver programando para Android mais antigo, poderá obter o backport, veja abaixo. Se você não quiser fazer isso, compreensivelmente, ainda usaria uma conversão interna:
String ts = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
System.out.println(ts);
É o mesmo que a resposta de sealskej. A saída é a mesma de antes.
Sim, o java.time funciona bem em dispositivos Android mais antigos e mais recentes. Requer apenas pelo menos Java 6 .
org.threeten.bp
com subpacotes.java.time
.java.time
foi descrito pela primeira vez.java.time
para Java 6 e 7 (ThreeTen para JSR-310).Sugiro usar a resposta de Hits, mas adicionando um formato de localidade, é assim que os desenvolvedores do Android recomendam :
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 é a versão Kotlin. Eu tenho outra idéia para adicionar um número aleatório aleatório no último dígito para fornecer tempo de época de variação.
Versão Kotlin
val randomVariance = (0..100).shuffled().first()
val currentEpoch = (System.currentTimeMilis()/1000) + randomVariance
val deltaEpoch = oldEpoch - currentEpoch
Eu acho que será melhor usar esse kode do que depender da versão 26 ou mais do android
java.util.Date
,java.util.Calendar
eTimestamp
estão agora legado, suplantado pelos java.time classes. A maior parte da funcionalidade java.time é portada para Java 6 e Java 7 no projeto ThreeTen-Backport . Mais adaptado para Android anterior no projeto ThreeTenABP . Consulte Como usar o ThreeTenABP… .