HOWTO · Java

Converter String em DateTime Object em Java

Este tutorial explica como converter uma string num objecto DateTime em Java

Este artigo introduzirá como podemos converter uma determinada string num objecto DateTime utilizando diferentes abordagens e exemplos.

Utilize SimpleDateFormat e java.util.Date para converter uma string de data num objecto DateTime em Java

SimpleDateFormat é uma classe utilizada para analisar e formatar uma data em termos de locale-sensitive-manner. Permite-nos converter uma string em DateTime e converter um objecto DateTime numa string.

No código abaixo, utilizamos a string date_time, que é interpretada chamando o método parse na instância SimpleDateFormat dateParser. O formato em que queremos que a string date_time seja analizada é especificado dentro do construtor SimpleDateFormat.

Também criámos uma nova instância da classe SimpleDateFormat com um formato diferente. A data anulada é então formatada e impressa.

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

public class StringToDateTime {
  public static void main(String[] args) {
    String date_time = "11/27/2020 05:35:00";
    SimpleDateFormat dateParser = new SimpleDateFormat("MM/dd/yy HH:mm:ss");
    {
      try {
        Date date = dateParser.parse(date_time);
        System.out.println(date);

        SimpleDateFormat dateFormatter = new SimpleDateFormat("MM/dd/yy");
        System.out.println(dateFormatter.format(date));

      } catch (ParseException e) {
        e.printStackTrace();
      }
    }
  }
}

Resultado:

Fri Nov 27 05 : 35 : 00 UTC 2020 11 / 27 / 20

Utilize a Biblioteca de Data e Hora Java 8 para converter uma String de data em formato de data e hora

A classe LocaleDate representa uma data em formato ISO sem tempo. A classe DateTimeFormatter é utilizada para a análise de datas em diferentes formatos. Podemos fornecer padrões personalizados chamando ofPattern() método em DateTimeFormatter.

A classe LocaleDate tem um método parse(), que toma a string de texto personalizada e um formatador específico inputFormat para analisar e obter uma instância de LocalDate. A instância LocaleDate obtida date é então formatada e impressa como saída.

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class Main {
  public static void main(String[] args) {
    DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss");

    LocalDate date = LocalDate.parse("11/27/2020 05:35:00", inputFormat);

    DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy");
    System.out.println(date.format(outputFormat));
  }
}

Resultado:

11/27/2020

Utilize joda-time para converter uma string de data em formato de data e hora

A joda-time é uma biblioteca padrão DateTime que fornece um rico array de métodos para efectuar cálculos de data e hora. A dependência maven para incluir a funcionalidade desta biblioteca é dada abaixo.

 <!-- https://mvnrepository.com/artifact/joda-time/joda-time -->
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.10.8</version>
    </dependency>

A DateTimeFormatter pode analisar as representações personalizadas de data e hora.

Criamos uma instância formatadora datetimeformat com um padrão personalizado. Chamando parseDateTimeTime na instância formatter dá um objecto DateTime utilizando a string personalizada dateTime.

Aqui criámos uma nova instância DateTimeFormatter com um padrão personalizado diferente. O método print() é chamado na nova instância que imprime o objecto DateTime joda_time num novo formato.

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class StringToDateTime {
  public static void main(String[] args) {
    String dateTime = "11/27/2020 05:35:00";
    DateTimeFormatter datetimeformat = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss");

    DateTime joda_time = datetimeformat.parseDateTime(dateTime);
    System.out.println("joda_time : " + joda_time);

    DateTimeFormatter dateTimeFormatOut = DateTimeFormat.forPattern("MM/dd/yyyy");
    System.out.println("date time format out:  " + dateTimeFormatOut.print(joda_time));
  }
}

Resultado:

joda_time : 2020-11-27T05:35:00.000+05:30
date time format out:  11/27/2020

Converter a data da string para Timestamp com Timestamp Construtor em Java

Aqui, utilizamos o construtor do Timestamp para obter um objeto Timestamp. Primeiro, utilizamos a classe SimpleDateFormat para definir o formato de date e depois obtemos o objeto data utilizando o método parser(), depois utilizamos o método geteTime() para adicionar tempo com a data e obter um timestamp como resultado. Veja o exemplo abaixo.

import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleTesting {
  public static void main(String[] args) {
    try {
      DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
      Date date = dateFormat.parse("12/10/1990");
      Timestamp timeStampDate = new Timestamp(date.getTime());
      System.out.println(timeStampDate);
    } catch (ParseException e) {
      System.out.println(e);
    }
  }
}

Resultado:

 1990-10-12 00:00:00.0

Converter a string de data em Timestamp com LocalDate em Java

No Java 8, ele adiciona um novo pacote java.time que contém várias classes para lidar com data e hora. Aqui, utilizamos a classe LocalDate desse pacote. Usamos o método parse() da classe LocalDate para obter o objeto LocalDate da string de data e então usamos o método atTime() para obter o objeto LocalDateTime que retorna uma data com hora. A classe now() é utilizada para obter a hora atual do sistema.

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

public class SimpleTesting {
  public static void main(String[] args) {
    LocalDate date = LocalDate.parse("2025-11-25");
    System.out.println(date);
    LocalDateTime dateTime = date.atTime(LocalTime.now());
    System.out.println(dateTime);
  }
}

Resultado:

2025 - 11 - 25 2025 - 11 - 25T09 : 44 : 56.814795

Converter a data da string em Timestamp com o método atStartOfDay() em Java

O método atStartOfDay() na classe LocalDate também é utilizado para obter o objeto LocalDateTime. Este método adiciona a hora à data no início do dia e retorna uma date-time em vez de uma simples data. Veja o exemplo abaixo.

import java.time.LocalDate;
import java.time.LocalDateTime;

public class SimpleTesting {
  public static void main(String[] args) {
    String strDate = "2019-10-20";
    LocalDate date = LocalDate.parse(strDate);
    LocalDateTime dateTime = date.atStartOfDay();
    System.out.println(dateTime);
  }
}

Resultado:

2019-10-20T00:00