type - string to datetime java




Como obter a data/hora atual em Java (17)

Qual é a melhor maneira de obter a data / hora atual em Java?


A nova API de tempo de dados é apresentada com o lançamento do Java 8. Isso se deve aos seguintes problemas causados ​​na antiga API de tempo de dados.

Difícil de lidar com o fuso horário: precisa escrever muito código para lidar com os fusos horários.

Não é seguro para thread: java.util.Date não é thread-safe.

Então dê uma olhada com o Java 8

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.Month;


public class DataTimeChecker {

    public static void main(String args[]) {
        DataTimeChecker dateTimeChecker = new DataTimeChecker();
        dateTimeChecker.DateTime();
    }

    public void DateTime() {
        // Get the current date and time
        LocalDateTime currentTime = LocalDateTime.now();
        System.out.println("Current DateTime: " + currentTime);

        LocalDate date1 = currentTime.toLocalDate();
        System.out.println("Date : " + date1);

        Month month = currentTime.getMonth();
        int day = currentTime.getDayOfMonth();
        int seconds = currentTime.getSecond();

        System.out.println("Month : " + month);
        System.out.println("Day : " + day);
        System.out.println("Seconds : " + seconds);

        LocalDateTime date2 = currentTime.withDayOfMonth(17).withYear(2018);
        System.out.println("Date : " + date2);

        //Prints 17 May 2018
        LocalDate date3 = LocalDate.of(2018, Month.MAY, 17);
        System.out.println("Date : " + date3);

        //Prints 04 hour 45 minutes
        LocalTime date4 = LocalTime.of(4, 45);
        System.out.println("Date : " + date4);

        // Convert to a String 
        LocalTime date5 = LocalTime.parse("20:15:30");
        System.out.println("Date : " + date5);
    }
}

Saída da codificação acima:

Current DateTime: 2018-05-17T04:40:34.603
Date : 2018-05-17
Month : MAY
Day : 17
Seconds : 34
Date : 2018-05-17T04:40:34.603
Date : 2018-05-17
Date : 04:45
Date : 20:15:30

tl; dr

Instant.now()                                         // Capture the current moment in UTC, with a resolution of nanoseconds.

… Ou…

ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )  // Capture the current moment as seen in the wall-clock time used by the people of a particular region (a time zone).

java.time

Algumas das respostas mencionam que java.time classes java.time são o substituto moderno para as antigas classes legadas de tempo de data herdadas junto com as primeiras versões do Java. Abaixo está um pouco mais de informação.

Fuso horário

As outras respostas não conseguem explicar como um fuso horário é crucial para determinar a data e a hora atuais. Para qualquer momento, a data e a hora variam ao redor do globo por zona. Por exemplo, alguns minutos depois da meia-noite é um novo dia em Paris, França, enquanto ainda está sendo “ontem” em Montréal Québec .

Instant

Grande parte de sua lógica de negócios e armazenamento / troca de dados deve ser feita no UTC , como uma prática recomendada. Para obter o momento atual no UTC com uma resolução em nanoseconds , use a classe Instant .

Instant instant = Instant.now();

ZonedDateTime

Você pode ajustar esse Instant em outros fusos horários. Aplique um objeto ZoneId para obter um ZonedDateTime .

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );

Podemos pular o Instant e obter o ZonedDateTime atual diretamente.

ZonedDateTime zdt = ZonedDateTime.now( z );

Sempre passe esse argumento de fuso horário opcional. Se omitido, o fuso horário padrão atual da sua JVM será aplicado. O padrão pode mudar a qualquer momento, mesmo durante o tempo de execução. Não submeta seu aplicativo a uma externalidade fora de seu controle. Sempre especifique o fuso horário desejado / esperado.

ZonedDateTime do_Not_Do_This = ZonedDateTime.now(); // BAD - Never rely implicitly on the current default time zone.

Mais tarde você pode extrair um Instant do ZonedDateTime .

Instant instant = zdt.toInstant();

Sempre use um Instant ou ZonedDateTime vez de um LocalDateTime quando quiser um momento real na linha do tempo. Os tipos Local… propositalmente não têm noção de fuso horário, portanto representam apenas uma idéia aproximada de um possível momento. Para obter um momento real, você deve atribuir um fuso horário para transformar os tipos Local… em um ZonedDateTime e, assim, torná-lo significativo.

LocalDate

A classe LocalDate representa um valor somente de datas sem hora do dia e sem fuso horário.

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );  // Always pass a time zone.

Cordas

Para gerar uma String representando o valor de data e hora, simplesmente chame toString nas classes java.time para os formatos padrão ISO 8601 .

String output = myLocalDate.toString();  // 2016-09-23

… Ou…

String output = zdt.toString();  // 2016-09-23T12:34:56.789+03:00[America/Montreal]

A classe ZonedDateTime estende o formato padrão, acrescentando sabiamente o nome do fuso horário entre colchetes.

Para outros formatos, pesquise o para muitas perguntas e respostas sobre a classe DateTimeFormatter .

Evite LocalDateTime

Ao contrário do comentário sobre a questão por RamanSB, você não deve usar a classe LocalDateTime para a data e hora atual.

O LocalDateTime propositalmente não possui informações de fuso horário ou deslocamento de UTC. Então, isso não é apropriado quando você está acompanhando um momento específico na linha do tempo. Certamente não é apropriado para capturar o momento atual.

O texto "Local" é contra-intuitivo. Significa qualquer localidade e não uma localidade específica. Por exemplo, o Natal deste ano começa à meia-noite do dia 25 de dezembro: 2017-12-25T00:00:00 , para ser representado como LocalDateTime . Mas isso significa meia-noite em vários pontos do mundo em diferentes momentos. A meia-noite acontece primeiro em Kiribati , depois na Nova Zelândia, horas mais tarde na Índia, e assim por diante, com várias outras horas se passando antes do Natal começar na França, quando as crianças no Canadá ainda estão esperando aquele dia. Cada um desses pontos iniciais de Natal seria representado como um ZonedDateTime separado.

De fora do seu sistema

Se você não puder confiar no relógio do sistema, consulte Java: Obter data e hora atuais do servidor, não do relógio do sistema e da minha resposta .

java.time.Clock

Para aproveitar um fornecedor alternativo do momento atual, escreva uma subclasse da classe abstrata java.time.Clock .

Você pode passar sua implementação do Clock como um argumento para os vários métodos java.time . Por exemplo, Instant.now( clock ) .

Instant instant = Instant.now( yourClockGoesHere ) ;

Para fins de teste, observe as implementações alternativas do Clock disponíveis estaticamente no próprio Clock : LocalDateTime , offset , tick e muito mais.

Sobre o java.time

O framework java.time está embutido no Java 8 e posterior. Essas classes substituem as antigas classes legacy data e hora legacy , como java.util.Date , java.util.Calendar e SimpleDateFormat .

O projeto Joda-time , agora em modo de manutenção , aconselha a migração para as classes java.time .

Para saber mais, veja o Oracle Tutorial . E pesquise o para muitos exemplos e explicações. A especificação é JSR 310 .

Você pode trocar objetos java.time diretamente com seu banco de dados. Use um driver JDBC compatível com o JDBC 4.2 ou posterior. Não há necessidade de strings, não há necessidade de classes java.sql.* .

Onde obter as classes java.time?

  • Java SE 8 , Java SE 9 e posterior
    • Construídas em.
    • Parte da API Java padrão com uma implementação integrada.
    • O Java 9 adiciona alguns recursos e correções menores.
  • Java SE 6 e Java SE 7
    • Grande parte da funcionalidade java.time é transferida para o Java 6 e 7 no ThreeTen-Backport .
  • Android
    • Versões posteriores das implementações do pacote Android das classes java.time.
    • Para versões anteriores do Android, o projeto ThreeTenABP adapta o ThreeTen-Backport (mencionado acima). Veja Como usar o ThreeTenABP… .

O projeto ThreeTen-Extra estende java.time com classes adicionais. Este projeto é um campo de testes para possíveis futuras adições ao java.time. Você pode encontrar algumas classes úteis aqui como Interval , YearWeek , YearQuarter e muito more .


Basta criar um objeto Date ...

Date date = new Date();

Como mencionado, a data básica () pode fazer o que você precisa em termos de obter a hora atual. Na minha experiência recente trabalhando intensamente com datas Java, há muitas esquisitices com as classes internas (bem como a depreciação de muitos dos métodos de classe Date). Uma singularidade que se destacou para mim foi que os meses são 0 baseados em índice, o que, do ponto de vista técnico, faz sentido, mas em termos reais pode ser muito confuso.

Se você está preocupado apenas com a data atual que deve ser suficiente - no entanto, se você pretende fazer muitas manipulações / cálculos com datas, pode ser muito benéfico usar uma biblioteca de terceiros (tantas existem porque muitos desenvolvedores Java ficaram insatisfeitos com isso). a funcionalidade incorporada).

Eu recomendo a recomendação de Stephen C como eu achei o Joda-time muito útil em simplificar meu trabalho com datas, ele também está muito bem documentado e você pode encontrar muitos exemplos úteis em toda a web. Eu mesmo acabei escrevendo uma classe wrapper estática (como DateUtils) que eu uso para consolidar e simplificar toda a minha manipulação de data comum.


Dê uma olhada na classe Date . Há também a classe Calendar mais recente, que é o método preferencial de fazer muitas operações de data / hora (muitos dos métodos em Date foram descontinuados).

Se você quiser apenas a data atual, crie um novo objeto Date ou chame Calendar.getInstance(); .


Depende de qual forma de data / hora você quer:

  • Se você quiser a data / hora como um valor numérico único, então System.currentTimeMillis() lhe dará isso, expresso como o número de milissegundos após a época do UNIX (como um Java long ). Esse valor é um delta de um ponto de tempo UTC e é independente do fuso horário local ... supondo que o relógio do sistema tenha sido configurado corretamente.

  • Se você quiser a data / hora em um formulário que permita acessar os componentes (ano, mês etc.) numericamente, você pode usar um dos seguintes:

    • new Date() fornece um objeto Date inicializado com a data / hora atual. O problema é que os métodos da API de Date são quase todos falhos ... e obsoletos.

    • Calendar.getInstance() fornece um objeto Calendar inicializado com a data / hora atual, usando o Locale e o TimeZone padrão. Outras sobrecargas permitem que você use um Locale específico e / ou TimeZone . O calendário funciona ... mas as APIs ainda são incômodas.

    • new org.joda.time.DateTime() fornece um objeto Joda-time inicializado com a data / hora atual, usando o fuso horário e a cronologia padrão. Existem muitas outras alternativas de Joda ... muitas para descrever aqui. (Mas note que algumas pessoas relatam que o tempo de Joda tem problemas de desempenho. Por exemplo, o LocalDateTime de Jodatime é lento quando usado pela primeira vez .)

    • no Java 8, chamar LocalDateTime.now() e ZonedDateTime.now() lhe dará representações 1 para a data / hora atual.

Antes do Java 8, a maioria das pessoas que conheciam essas coisas recomendavam o Joda-time como tendo (de longe) as melhores APIs Java para fazer coisas envolvendo cálculos de ponto de tempo e duração. Com o Java 8, isso não é mais verdade. No entanto, se você já estiver usando o tempo do Joda na sua base de código, não há dois motivos fortes para migrar.

1 - Observe que LocalDateTime não inclui um fuso horário. Como diz o javadoc: "Ele não pode representar um instante na linha do tempo sem informações adicionais, como um deslocamento ou fuso horário".

2 - Seu código não será quebrado se você não o fizer e você não receberá avisos de desaprovação. Claro, a base de código do Joda provavelmente irá parar de receber atualizações, mas é improvável que precise delas. Nenhuma atualização significa estabilidade e isso é bom . Observe também que é altamente provável que, se alguém corrigir problemas causados ​​por regressões na plataforma Java.


No Java 8 é:

LocalDateTime.now()

e caso você precise de informações sobre fuso horário:

ZonedDateTime.now()

e caso você queira imprimir uma string formatada de fantasia:

System.out.println(ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME))

Para java.util.Date, basta criar um novo Date ()

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date)); //2016/11/16 12:08:43

Para java.util.Calendar, usa Calendar.getInstance ()

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal)); //2016/11/16 12:08:43

Para java.time.LocalDateTime, usa LocalDateTime.now ()

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
System.out.println(dtf.format(now)); //2016/11/16 12:08:43

Para java.time.LocalDate, usa LocalDate.now ()

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate localDate = LocalDate.now();
System.out.println(dtf.format(localDate)); //2016/11/16

Referência: https://www.mkyong.com/java/java-how-to-get-current-date-time-date-and-calender/


Se você só precisa imprimir um registro de data e hora no formato YYYY.MM.DD-HH.MM.SS (caso muito frequente), então aqui está a maneira de fazer isso:

String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());

Semelhante às soluções acima. Mas eu sempre me vejo procurando por esse pedaço de código:

Date date=Calendar.getInstance().getTime();
System.out.println(date);

Usar:

String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
System.out.println(timeStamp );

(Está funcionando.)


Você já olhou para java.util.Date? É exatamente o que você quer.


Entenda a classe java.util.Date

1.1 Como obter a data atual

import java.util.Date;

class Demostration{
    public static void main(String[]args){
        Date date = new Date(); // date object
        System.out.println(date); // Try to print the date object
    }
}

1.2 Como usar o método getTime ()

import java.util.Date;
public class Main {
    public static void main(String[]args){
        Date date = new Date();
        long timeInMilliSeconds = date.getTime();
        System.out.println(timeInMilliSeconds);
    }
}

Isso retornará o número de milissegundos desde 1º de janeiro de 1970, 00:00:00 GMT para fins de comparação de horário.

1.3 Como formatar o tempo usando a classe SimpleDateFormat

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

class Demostration{
    public static void main(String[]args){
        Date date=new Date();
        DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate=dateFormat.format(date);
        System.out.println(formattedDate);
    }
}

Além disso, tente usar padrões de formato diferentes, como "aaaa-MM-dd hh: mm: ss", e selecione o padrão desejado. http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

2 Entenda a classe java.util.Calendar

2.1 Usando a Classe de Calendário para obter o registro de data e hora atual

import java.util.Calendar;

class Demostration{
    public static void main(String[]args){
        Calendar calendar=Calendar.getInstance();
        System.out.println(calendar.getTime());
    }
}

2.2 Tente usar setTime e outros métodos definidos para definir o calendário para uma data diferente.

Fonte: http://javau91.blogspot.com/


Eu criei esses métodos, funciona para mim ...

public String GetDay() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd")));
}

public String GetNameOfTheDay() {
    return String.valueOf(LocalDateTime.now().getDayOfWeek());
}

public String GetMonth() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("MM")));
}

public String GetNameOfTheMonth() {
    return String.valueOf(LocalDateTime.now().getMonth());
}

public String GetYear() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy")));
}

public boolean isLeapYear(long year) {
    return Year.isLeap(year);
}

public String GetDate() {
    return GetDay() + "/" + GetMonth() + "/" + GetYear();
}

public String Get12HHour() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("hh")));
}

public String Get24HHour() {
    return String.valueOf(LocalDateTime.now().getHour());
}

public String GetMinutes() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("mm")));
}

public String GetSeconds() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("ss")));
}

public String Get24HTime() {
    return Get24HHour() + ":" + GetMinutes();
}

public String Get24HFullTime() {
    return Get24HHour() + ":" + GetMinutes() + ":" + GetSeconds();
}

public String Get12HTime() {
    return Get12HHour() + ":" + GetMinutes();
}

public String Get12HFullTime() {
    return Get12HHour() + ":" + GetMinutes() + ":" + GetSeconds();
}

import java.util.*;
import java.text.*;

public class DateDemo {
   public static void main(String args[]) {
      Date dNow = new Date( );
      SimpleDateFormat ft = 
      new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
      System.out.println("Current Date: " + ft.format(dNow));
   }
}

você pode usar data para dados atuais fet. Então, usando SimpleDateFormat obter formato


    // 2015/09/27 15:07:53
    System.out.println( new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(Calendar.getInstance().getTime()) );

    // 15:07:53
    System.out.println( new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()) );

    // 09/28/2015
    System.out.println(new SimpleDateFormat("MM/dd/yyyy").format(Calendar.getInstance().getTime()));

    // 20150928_161823
    System.out.println( new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime()) );

    // Mon Sep 28 16:24:28 CEST 2015
    System.out.println( Calendar.getInstance().getTime() );

    // Mon Sep 28 16:24:51 CEST 2015
    System.out.println( new Date(System.currentTimeMillis()) );

    // Mon Sep 28
    System.out.println( new Date().toString().substring(0, 10) );

    // 2015-09-28
    System.out.println( new java.sql.Date(System.currentTimeMillis()) );

    // 14:32:26
    Date d = new Date();
    System.out.println( (d.getTime() / 1000 / 60 / 60) % 24 + ":" + (d.getTime() / 1000 / 60) % 60 + ":" + (d.getTime() / 1000) % 60 );

    // 2015-09-28 17:12:35.584
    System.out.println( new Timestamp(System.currentTimeMillis()) );

    // Java 8

    // 2015-09-28T16:16:23.308+02:00[Europe/Belgrade]
    System.out.println( ZonedDateTime.now() );

    // Mon, 28 Sep 2015 16:16:23 +0200
    System.out.println( ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME) );

    // 2015-09-28
    System.out.println( LocalDate.now(ZoneId.of("Europe/Paris")) ); // rest zones id in ZoneId class

    // 16
    System.out.println( LocalTime.now().getHour() );

    // 2015-09-28T16:16:23.315
    System.out.println( LocalDateTime.now() );

java.util.Date date = new java.util.Date();

É preenchido automaticamente com o tempo que é instanciado.





datetime