Note, eu NÃO quero milis da época. Quero o número de milissegundos atualmente no relógio.
Por exemplo, eu tenho esse pedaço de código.
Date date2 = new Date();
Long time2 = (long) (((((date2.getHours() * 60) + date2.getMinutes())* 60 ) + date2.getSeconds()) * 1000);
Existe uma maneira de obter milissegundos com data? Há outra maneira de fazer isso?
Nota: System.currentTimeMillis()
dá-me milis da época que não é o que estou procurando.
java
date
time
milliseconds
Lemonio
fonte
fonte
[0, 999]
, correto? @thinksteep leu a última frase.java.util.Date
agora são herdadas , substituídas pelas classes java.time .java.util.Date
agora são herdadas , substituídas pelas classes java.time . Consulte o Tutorial da Oracle .Respostas:
Você quer dizer?
BTW Windows não permite o horário de 1969
fonte
c.get(Calendar.MILLISECOND)
não deveria. Pense sempre nos casos de canto!System.currentTimeMillis()
não é afetado pelos fusos horários.Usar calendário
ou
Na prática, acho que quase sempre será igual a System.currentTimeMillis ()% 1000; a menos que alguém tenha um milissegundo de salto ou algum calendário seja definido com uma época que não esteja no segundo limite.
fonte
fonte
tl; dr
Você pede a fração de segundo do tempo atual como um número de milissegundos ( sem contar da época).
Veja este código executado ao vivo em IdeOne.com .
Usando java.time
A maneira moderna é com as classes java.time.
Capture o momento atual no UTC.
Use o
Instant.get
método para interrogar o valor de aTemporalField
. No nosso caso, oTemporalField
que queremos éChronoField.MILLI_OF_SECOND
.Ou faça as contas você mesmo.
É mais provável que você esteja solicitando um fuso horário específico. É provável que a fração de segundo seja igual à de
Instant
mas há tantas anomalias com fusos horários que hesito em fazer essa suposição.Interrogar pelo segundo fracionário. A pergunta fazia milissegundos , mas as classes java.time usam uma resolução mais fina de nanossegundos . Isso significa que o número de nanossegundos variará de 0 a 999.999.999.
Se você realmente deseja milissegundos, trunque os dados mais finos dividindo por um milhão. Por exemplo, meio segundo é 500.000.000 nanossegundos e também é 500 milissegundos.
Sobre java.time
A estrutura java.time é integrada ao Java 8 e posterior. Essas classes suplantar os velhos problemáticos legados aulas de data e hora, como
java.util.Date
,Calendar
, eSimpleDateFormat
.O projeto Joda-Time , agora em modo de manutenção , aconselha a migração para as classes java.time .
Para saber mais, consulte o Tutorial do Oracle . E procure Stack Overflow para muitos exemplos e explicações. A especificação é JSR 310 .
Onde obter as classes java.time?
O projeto ThreeTen-Extra estende java.time com classes adicionais. Este projeto é um campo de prova para possíveis adições futuras ao java.time. Você pode encontrar algumas classes úteis aqui, como
Interval
,YearWeek
,YearQuarter
, e mais .fonte
Eu tentei alguns acima, mas eles parecem redefinir @ 1000
Este definitivamente funciona, e também deve levar o ano em consideração
e faça o mesmo para o horário final, se necessário.
fonte
long timeNow = System.currentTimeMillis();
System.out.println(new Date(timeNow));
fonte
Joda-Time
Eu acho que você pode usar o Joda-Time para fazer isso. Dê uma olhada na
DateTime
classe e seugetMillisOfSecond
método. Algo comofonte
getMillis()
possui acesso protegido"; precisa usar em seuget()
lugar. Observe também que issonew DateTime(new Date())
é equivalente a escrever simplesmentenew DateTime()
.millisOfSecond
acessa um objeto e a chamada adicionalget
extrai uma primitivaint
desse objeto. Você pode recolher as duas chamadas usando o método getter de conveniênciagetMillisOfSecond
,. O Joda-Time segue esse padrão para muitas de suas propriedades.No Java 8, você pode simplesmente fazer
fonte
Instant.now().toEpochMilli()
Eu fiz o teste usando java 8 Não importa a ordem em que o construtor sempre leva 0 milissegundos e a concatenação entre 26 e 33 milissegundos abaixo e a iteração de uma concatenação de 1000
Espero que ajude a experimentá-lo com seu ide
fonte
Java 8:
fonte
LocalDateTime
classe não pode representar um momento, sem qualquer conceito de fuso horário ou deslocamento do UTC e, portanto, não pode rastrear esses problemas de fuso horário.Você pode usar a classe java.util.Calendar para obter tempo em milissegundos. Exemplo:
fonte