Esta pergunta é mais antiga que essa pergunta anteriormente marcada como duplicada. Inverti a designação, reabrindo esta questão e marcando a mais recente como duplicada.
Basil Bourque
Respostas:
414
Apenas construa um novo Dateobjeto sem argumentos; isso atribuirá a data e hora atuais ao novo objeto.
Aloca um objeto Date e o inicializa para que ele represente a hora em que foi alocado , medida no milissegundo mais próximo.
Verifique se você está usando java.util.Datee não java.sql.Date- o último não possui um construtor de zero-arg e possui semânticas um pouco diferentes que são o tópico de uma conversa totalmente diferente. :)
Observe também que GregorianCalendar e muitos objetos semelhantes funcionam da mesma maneira. Portanto, qualquer que seja o tipo de objeto de data / calendário com o qual você esteja trabalhando, o construtor de argumento zero geralmente inicializa o objeto na data / hora atual.
Peter Di Cecco
No documento Date: A partir do JDK 1.1, a classe Calendar deve ser usada para converter campos de datas e horas, e a classe DateFormat deve ser usada para formatar e analisar as seqüências de datas.
As classes Java Date e Calendar são consideradas por muitos como mal projetadas. Você deve dar uma olhada no Joda Time , uma biblioteca comumente usada no lugar das bibliotecas de datas internas do Java.
O equivalente DateTime.Nowem Joda Time é:
DateTime dt =newDateTime();
Atualizar
Conforme observado nos comentários, as versões mais recentes do Joda Time têm um DateTime.now()método, portanto:
Observe que esta resposta foi publicada em 2010. O Java 8 absorveu muitos dos melhores recursos do Joda Time. Consulte a documentação oficial e muitos outros artigos on-line para obter mais informações.
21416 DavidSão Paulo
36
tl; dr
Instant.now()
java.time
A classe java.util.Date foi ultrapassada pelo novo pacote java.time ( Tutorial ) no Java 8 e posterior. As antigas classes java.util.Date/.Calendar são notoriamente problemáticas, confusas e com falhas. Evite-os.
Hora do dia, com uma fração de segundo a resolução de nanossegundos .
Fuso horário.
Se nenhum fuso horário for especificado, o fuso horário padrão atual da sua JVM será designado silenciosamente. É melhor especificar o fuso horário desejado / esperado do que confiar implicitamente no padrão.
ZoneId z =ZoneId.of("Pacific/Auckland");ZonedDateTime zdt =ZonedDateTime.now( z );
UTC
Geralmente é melhor adquirir o hábito de realizar seu trabalho de back-end (lógica de negócios, banco de dados, armazenamento, troca de dados), tudo no fuso horário UTC . O código acima depende implicitamente do fuso horário padrão atual da JVM.
A Instantclasse representa um momento na linha do tempo no UTC com uma resolução de nanossegundos.
Instant instant =Instant.now();
A Instantclasse é uma classe básica de bloco de construção em java.time e pode ser usada frequentemente em seu código.
Você se ajusta facilmente a outro fuso horário para apresentação ao usuário. Use um nome de fuso horário adequado , nunca os códigos de 3-4 letras como ESTou IST.
ZoneId z =ZoneId.of("America/Montreal");ZonedDateTime nowMontreal = instant.atZone( z );
Gere uma representação String desse valor de data e hora, localizado.
Ou, para permanecer no UTC, use Instant. Um Instantobjeto representa um momento na linha do tempo, com resolução de nanossegundos, sempre em UTC. Isso fornece o bloco de construção para uma data e hora da zona, juntamente com uma atribuição de fuso horário. Você pode pensar conceitualmente desta maneira:
O Java sempre teve suporte inadequado para os casos de uso de data e hora. Por exemplo, as classes existentes (como java.util.Datee SimpleDateFormatter) não são seguras para threads, o que pode levar a problemas de simultaneidade. Também há certas falhas na API. Por exemplo, os anos java.util.Dateiniciam em 1900, os meses iniciam em 1 e os dias iniciam em 0 - não muito intuitivo. Esses problemas levaram à popularidade de bibliotecas de data e hora de terceiros, como Joda-Time. Para endereçar uma nova data e hora, a API foi projetada para Java SE 8.
O método now()retorna a data atual usando o relógio do sistema e o fuso horário padrão, e não nulo . Ele obtém a data e hora atual do relógio do sistema no fuso horário padrão. Isso consultará o relógio do sistema no fuso horário padrão para obter a data e hora atuais. O uso desse método impedirá a capacidade de usar um relógio alternativo para teste porque o relógio é codificado.
Respostas:
Apenas construa um novo
Date
objeto sem argumentos; isso atribuirá a data e hora atuais ao novo objeto.Nas palavras dos Javadocs para o construtor de argumento zero :
Verifique se você está usando
java.util.Date
e nãojava.sql.Date
- o último não possui um construtor de zero-arg e possui semânticas um pouco diferentes que são o tópico de uma conversa totalmente diferente. :)fonte
As classes Java Date e Calendar são consideradas por muitos como mal projetadas. Você deve dar uma olhada no Joda Time , uma biblioteca comumente usada no lugar das bibliotecas de datas internas do Java.
O equivalente
DateTime.Now
em Joda Time é:Atualizar
Conforme observado nos comentários, as versões mais recentes do Joda Time têm um
DateTime.now()
método, portanto:fonte
tl; dr
java.time
A classe java.util.Date foi ultrapassada pelo novo pacote java.time ( Tutorial ) no Java 8 e posterior. As antigas classes java.util.Date/.Calendar são notoriamente problemáticas, confusas e com falhas. Evite-os.
ZonedDateTime
Obtenha o momento atual em java.time.
A
ZonedDateTime
encapsula:Se nenhum fuso horário for especificado, o fuso horário padrão atual da sua JVM será designado silenciosamente. É melhor especificar o fuso horário desejado / esperado do que confiar implicitamente no padrão.
UTC
Geralmente é melhor adquirir o hábito de realizar seu trabalho de back-end (lógica de negócios, banco de dados, armazenamento, troca de dados), tudo no fuso horário UTC . O código acima depende implicitamente do fuso horário padrão atual da JVM.
A
Instant
classe representa um momento na linha do tempo no UTC com uma resolução de nanossegundos.A
Instant
classe é uma classe básica de bloco de construção em java.time e pode ser usada frequentemente em seu código.Quando você precisar de mais flexibilidade na formatação, transforme-a em
OffsetDateTime
. Especifique umZoneOffset
objeto. Para o UTC, use a constante útil para o UTC .Fuso horário
Você se ajusta facilmente a outro fuso horário para apresentação ao usuário. Use um nome de fuso horário adequado , nunca os códigos de 3-4 letras como
EST
ouIST
.Gere uma representação String desse valor de data e hora, localizado.
Instant
Ou, para permanecer no UTC, use
Instant
. UmInstant
objeto representa um momento na linha do tempo, com resolução de nanossegundos, sempre em UTC. Isso fornece o bloco de construção para uma data e hora da zona, juntamente com uma atribuição de fuso horário. Você pode pensar conceitualmente desta maneira:Você pode extrair um
Instant
de aZonedDateTime
.Você pode começar com um instante. Não há necessidade de especificar um fuso horário aqui, como
Instant
sempre no UTC.fonte
Eu prefiro usar o objeto Calendário.
Acho muito mais fácil trabalhar com isso. Você também pode obter um objeto Date no calendário.
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
fonte
Calendar.getInstance()
No Java 8 é:
fonte
Observe que o objeto Date é mutável e, se você quiser fazer algo sofisticado, use jodatime .
fonte
java.lang.System.currentTimeMillis();
retornará a data e hora desde a épocafonte
fonte
Se você criar um novo objeto Data, por padrão, ele será definido para o horário atual:
fonte
O Java sempre teve suporte inadequado para os casos de uso de data e hora. Por exemplo, as classes existentes (como
java.util.Date
eSimpleDateFormatter
) não são seguras para threads, o que pode levar a problemas de simultaneidade. Também há certas falhas na API. Por exemplo, os anosjava.util.Date
iniciam em 1900, os meses iniciam em 1 e os dias iniciam em 0 - não muito intuitivo. Esses problemas levaram à popularidade de bibliotecas de data e hora de terceiros, comoJoda-Time
. Para endereçar uma nova data e hora, a API foi projetada para Java SE 8.Conforme o documento :
fonte