Como obtenho a data e hora atuais em Java?
Eu estou procurando algo que é equivalente ao DateTime.Now
do c #.
Como obtenho a data e hora atuais em Java?
Eu estou procurando algo que é equivalente ao DateTime.Now
do c #.
Respostas:
Apenas construa um novo Date
objeto sem argumentos; isso atribuirá a data e hora atuais ao novo objeto.
import java.util.Date;
Date d = new Date();
Nas palavras dos Javadocs para o construtor de argumento zero :
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.Date
e 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. :)
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 é:
DateTime dt = new DateTime();
Atualizar
Conforme observado nos comentários, as versões mais recentes do Joda Time têm um DateTime.now()
método, portanto:
DateTime dt = DateTime.now();
Instant.now()
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.
ZonedDateTime now = ZonedDateTime.now();
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.
ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );
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.
Instant instant = Instant.now();
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 um ZoneOffset
objeto. Para o UTC, use a constante útil para o UTC .
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
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
ou IST
.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z );
Gere uma representação String desse valor de data e hora, localizado.
String output = DateTimeFormatter
.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH )
.format ( nowMontreal );
Instant
Ou, para permanecer no UTC, use Instant
. Um Instant
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 a ZonedDateTime
.
Instant instantNow = zdt.toInstant();
Você pode começar com um instante. Não há necessidade de especificar um fuso horário aqui, como Instant
sempre no UTC.
Instant now = Instant.now();
Eu prefiro usar o objeto Calendário.
Calendar now = GregorianCalendar.getInstance()
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
Calendar.getInstance()
No Java 8 é:
ZonedDateTime dateTime = ZonedDateTime.now();
java.lang.System.currentTimeMillis();
retornará a data e hora desde a época
Se você criar um novo objeto Data, por padrão, ele será definido para o horário atual:
import java.util.Date;
Date now = new Date();
O Java sempre teve suporte inadequado para os casos de uso de data e hora. Por exemplo, as classes existentes (como java.util.Date
e 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.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, como Joda-Time
. Para endereçar uma nova data e hora, a API foi projetada para Java SE 8.
LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);
Conforme o documento :
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.