FYI, os incômodos aulas em tempo data antigas, tais como java.util.Date, java.util.Calendare Timestampestã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… .
Basil Bourque
Respostas:
298
A solução é :
Long tsLong =System.currentTimeMillis()/1000;String ts = tsLong.toString();
Isso não leva em consideração o deslocamento do fuso horário do dispositivo.
kjdion84
1
@ kjdion84 com licença, mas por que você acha que seria importante? Apenas com base na pergunta.
21819 C # ԃ at
82
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_CHANGEDe ACTION_TIMEZONE_CHANGEDIntenção transmissões para saber quando muda o tempo todo.
Em developer.android.com/reference/java/lang/… , descobri que System.nanoTime()é uma alternativa System.currentTimeMillis()e não possui flutuações imprevisíveis, e foi desenvolvido para medir diferenças de duração.
Bianca Daniciuc 13/09/2013
2
@ ana01 "normalmente o valor zero é sempre que o dispositivo foi inicializado pela última vez" - portanto, ele pode ser usado apenas quando você comparar diferenças de duração no mesmo dispositivo. Não é útil para armazenamento de banco de dados, por exemplo.
Michał K
1
Apenas uma observação no comentário de @ ana01 que System.nanoTime()não é adequada para exibir a hora do relógio de parede. Para esse fim, use em seu System.currentTimeMillis()lugar.
Akash Agarwal
33
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 TimeUnitclasse para conversão de unidades - de System.currentTimeMillis()para segundos.
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.
*/publicclassClock{/**
* Get current time in human-readable form.
* @return current time as a string.
*/publicstaticString getNow(){Time now =newTime();
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.
*/publicstaticString getTimeStamp(){Time now =newTime();
now.setToNow();String sTime = now.format("%Y_%m_%d_%H_%M_%S");return sTime;}}
Ei, você também poderia dizer a melhor maneira de classificar uma lista de carimbos de data e hora? Eu estava pensando em classificá-los eu mesmo, mas pensei que poderia haver uma maneira melhor.
Abbas
Para referência futura para qualquer um lendo este estar ciente de que "android.text.format.Time" está agora obsoleta
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 Instantclasse 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:
É o mesmo que a resposta de sealskej. A saída é a mesma de antes.
Pergunta: Posso usar o java.time no Android?
Sim, o java.time funciona bem em dispositivos Android mais antigos e mais recentes. Requer apenas pelo menos Java 6 .
No Java 8 e posterior e em dispositivos Android mais recentes (do nível 26 da API), a API moderna é integrada.
Nos Java 6 e 7 não Android, obtenha o ThreeTen Backport, o backport das novas classes (ThreeTen para JSR 310; veja os links na parte inferior).
No Android (mais antigo), use a edição Android do ThreeTen Backport. Chama-se ThreeTenABP. E certifique-se de importar as classes de data e hora org.threeten.bpcom subpacotes.
Resposta quase perfeita (eu votei), mas, pelo menos na minha opinião sincera, você deve remover a referência do ThreeTen Backport, pois esta é uma pergunta sobre o Android e não o Java em geral. E pode ser confuso para iniciantes no Android.
Slobodan Antonijević
1
@ SlobodanAntonijević É importante que os programadores do Android entendam que (a) se eles suportam o Android 26 e posterior, eles têm uma implementação do java.time embutido, (b) se suportam o Android anterior antes dos 26, eles devem adicionar uma biblioteca , a biblioteca ThreeTenABP e (c) se estiver usando o ThreeTenABP , saiba que essa biblioteca é realmente uma adaptação do ThreeTen-Backport adaptada de Java para Android. A biblioteca ThreeTenABP é apenas um invólucro específico do Android em torno da biblioteca ThreeTen-Backport . Veja este gráfico da tabela comparando as 3 bibliotecas.
Basil Bourque
@BasilBourque você está completamente correto. Mas você pode realmente importar o ThreeTen-Backport e usá-lo em um aplicativo Android, mas com um impacto extremamente grande na causa do desempenho de sua dependência do JAR. É por isso que eu disse que a postagem deve ser mais específica, pois os desenvolvedores do Android nunca devem usar o ThreeTen-Backport e, em vez disso, usar o ThreeTenABP para API 25 e suporte abaixo. Eu já vi vários desenvolvedores em várias placas que ficam confusas sobre qual delas deve ser usada para o Android, porque elas parecem semelhantes por nome.
Slobodan Antonijević
Bom ponto, @ SlobodanAntonijević. Eu tentei deixar isso um pouco mais claro.
Ole VV
1
@ SlobodanAntonijević Esta tabela que mostra onde obter o java.time para Java e Android pode ajudar a esclarecer.
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… .Respostas:
A solução é :
fonte
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 usandoSystem.currentTimeMillis()
, considere ouvindo oACTION_TIME_TICK
,ACTION_TIME_CHANGED
eACTION_TIMEZONE_CHANGED
Intenção transmissões para saber quando muda o tempo todo.fonte
System.nanoTime()
é uma alternativaSystem.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 seuSystem.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 - deSystem.currentTimeMillis()
para segundos.fonte
Você pode usar a classe SimpleDateFormat :
fonte
Use o método abaixo para obter o carimbo de data / hora atual. Isso funciona bem para mim.
fonte
É de uso simples:
Se você quiser em um formato específico, precisará do Formatador como abaixo
fonte
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:
fonte
Tente esse
e timeStamp para formato de hora
fonte
java.time
Eu gostaria de contribuir com a resposta moderna.
Saída ao executar agora:
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:É o mesmo que a resposta de sealskej. A saída é a mesma de antes.
Pergunta: Posso usar o java.time no Android?
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.Ligações
java.time
.java.time
foi descrito pela primeira vez.java.time
para Java 6 e 7 (ThreeTen para JSR-310).fonte
Solução em Kotlin:
Verifique se a sua versão mínima do SDK é 26.
fonte
Sugiro usar a resposta de Hits, mas adicionando um formato de localidade, é assim que os desenvolvedores do Android recomendam :
fonte
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
Eu acho que será melhor usar esse kode do que depender da versão 26 ou mais do android
fonte