Java localdate to datetime

Convert between LocalDate and LocalDateTime

Learn to convert from LocalDate to LocalDateTime and from LocalDateTime to LocalDate in Java 8.

To restate, LocalDate represents a calendar date without time and timezone. LocalDateTime stores the date and time information in the local timeline. It does not have any timezone information.

LocalDateTime = LocalDate + LocalTime

1. LocalDate -> LocalDateTime

To convert a LocalDate instance to LocalDateTime instance, we need to add only the time part in it. For this, we can use either of the given 5 methods of LocalDate class.

  • LocalDateTime atStartOfDay()
  • LocalDateTime atTime(LocalTime time)
  • LocalDateTime atTime(int hour, int minutes)
  • LocalDateTime atTime(int hour, int minutes, int seconds)
  • LocalDateTime atTime(int hour, int minute, int second, int nanoOfSecond)

The method atStartOfDay() returns a LocalDateTime formed from the given date at the time of midnight, 00:00, at the start of the given date.

For all other methods, we provide the specific time in method arguments.

  • hour – the hour-of-day to use, from 0 to 23
  • minute – the minute-of-hour to use, from 0 to 59
  • second – the second-of-minute to represent, from 0 to 59
  • nanoOfSecond – the nano-of-second to represent, from 0 to 999,999,999
Читайте также:  Javascript timestamp to seconds

Java program to convert a LocalDate instance to LocalDateTime instance.

LocalDate localDate = LocalDate.parse("2019-01-04"); //Beginning of the day LocalDateTime localDateTime1 = localDate.atStartOfDay(); System.out.println(localDateTime1); //Current time LocalDateTime localDateTime2 = localDate.atTime(LocalTime.now()); System.out.println(localDateTime2); //Specific time LocalDateTime localDateTime3 = localDate.atTime(04, 30, 56); System.out.println(localDateTime3);
2019-01-04T00:00 2019-01-04T18:31:21.936 2019-01-04T04:30:56

2. LocalDateTime -> LocalDate

To convert LocalDateTime to LocalDate instance, use toLocalDate() method. It returns a LocalDate with the same year, month and day as in the original localdatetime object.

LocalDateTime localDateTime = LocalDateTime.now(); LocalDate localDate = localDateTime.toLocalDate(); System.out.println(localDate);

Источник

Преобразование даты в LocalDate или LocalDateTime и обратно

Начиная с Java 8, у нас есть новый API Date: java.time .

Однако иногда нам по-прежнему необходимо выполнять преобразования между новым и старым API и работать с представлениями даты из обоих.

2. Преобразование java.util.Date в java.time.LocalDate

Начнем с преобразования старого представления даты в новое.

Здесь мы можем воспользоваться новым методом toInstant() , который был добавлен в java.util.Date в Java 8.

Когда мы преобразовываем объект Instant , необходимо использовать ZoneId , потому что объекты Instant не зависят от часового пояса — просто точки на временной шкале.

API atZone(ZoneId zone) из объекта Instant возвращает ZonedDateTime , поэтому нам просто нужно извлечь из него LocalDate с помощью метода toLocalDate() .

Во-первых, мы используем системный ZoneId по умолчанию :

 public LocalDate convertToLocalDateViaInstant(Date dateToConvert)    return dateToConvert.toInstant()   .atZone(ZoneId.systemDefault())   .toLocalDate();   > 

И похожее решение, но с другим способом создания объекта Instant — с использованием метода ofEpochMilli() :

 public LocalDate convertToLocalDateViaMilisecond(Date dateToConvert)    return Instant.ofEpochMilli(dateToConvert.getTime())   .atZone(ZoneId.systemDefault())   .toLocalDate();   > 

Прежде чем двигаться дальше, давайте также кратко рассмотрим старый класс java.sql.Date и то, как его можно также преобразовать в LocalDate .

Начиная с Java 8, мы можем найти дополнительный метод toLocalDate () для java.sql.Date , который также дает нам простой способ преобразования его в java.time.LocalDate .

В этом случае нам не нужно беспокоиться о часовом поясе:

 public LocalDate convertToLocalDateViaSqlDate(Date dateToConvert)    return new java.sql.Date(dateToConvert.getTime()).toLocalDate();   > 

Точно так же мы можем преобразовать старый объект Date в объект LocalDateTime . Давайте посмотрим на это дальше.

3. Преобразование java.util.Date в java.time.LocalDateTime

Чтобы получить экземпляр LocalDateTime , мы можем аналогичным образом использовать посредник ZonedDateTime, а затем использовать API toLocalDateTime() .

Как и раньше, мы можем использовать два возможных решения для получения объекта Instant из java.util.Date :

 public LocalDateTime convertToLocalDateTimeViaInstant(Date dateToConvert)    return dateToConvert.toInstant()   .atZone(ZoneId.systemDefault())   .toLocalDateTime();   >    public LocalDateTime convertToLocalDateTimeViaMilisecond(Date dateToConvert)    return Instant.ofEpochMilli(dateToConvert.getTime())   .atZone(ZoneId.systemDefault())   .toLocalDateTime();   > 

Обратите внимание, что для дат до 10 октября 1582 года необходимо настроить Calendar как григорианский календарь и вызвать метод setGregorianChange ():

 GregorianCalendar calendar = new GregorianCalendar();  calendar.setGregorianChange(new Date(Long.MIN_VALUE));   Date dateToConvert = calendar.getTime(); 

И, начиная с Java 8, мы также можем использовать java.sql.Timestamp для получения LocalDateTime :

 ocalDateTime convertToLocalDateTimeViaSqlTimestamp(Date dateToConvert)    return new java.sql.Timestamp(   dateToConvert.getTime()).toLocalDateTime();   > 

4. Преобразование java.time.LocalDate в java.util.Date

Теперь, когда мы хорошо понимаем, как преобразовать старое представление данных в новое, давайте посмотрим на преобразование в другом направлении.

Мы обсудим два возможных способа преобразования LocalDate в Date .

В первом мы используем новый метод valueOf(LocalDate date) , предоставленный в объекте java.sql.Date , который принимает LocalDate в качестве параметра:

 public Date convertToDateViaSqlDate(LocalDate dateToConvert)    return java.sql.Date.valueOf(dateToConvert);   > 

Как мы видим, это легко и интуитивно понятно. Он использует местный часовой пояс для преобразования (все делается скрыто, так что не о чем беспокоиться).

В другом примере Java 8 мы используем объект Instant , который мы передаем в метод from (Instant Instant) объекта java.util.Date : **** «

 public Date convertToDateViaInstant(LocalDate dateToConvert)    return java.util.Date.from(dateToConvert.atStartOfDay()   .atZone(ZoneId.systemDefault())   .toInstant());   > 

Обратите внимание, что здесь мы используем объект Instant и что нам также нужно позаботиться о часовых поясах при выполнении этого преобразования.

Далее воспользуемся очень похожим решением для преобразования LocalDateTime в объект Date .

5. Преобразование java.time.LocalDateTime в java.util.Date

Самый простой способ получить java.util.Date из LocalDateTime — использовать расширение для java.sql.Timestamp, доступное в Java 8:

 public Date convertToDateViaSqlTimestamp(LocalDateTime dateToConvert)    return java.sql.Timestamp.valueOf(dateToConvert);   > 

Но, конечно, альтернативным решением является использование объекта Instant , который мы получаем из ZonedDateTime :

 Date convertToDateViaInstant(LocalDateTime dateToConvert)    return java.util.Date   .from(dateToConvert.atZone(ZoneId.systemDefault())   .toInstant());   > 

6. Дополнения для Java 9

В Java 9 доступны новые методы, упрощающие преобразование между java.util.Date и java.time.LocalDate или java.time.LocalDateTime .

LocalDate.ofInstant(Instant Instant, ZoneId zone) и LocalDateTime.ofInstant(Instant Instant, ZoneId zone) предоставляют удобные ярлыки:

 public LocalDate convertToLocalDate(Date dateToConvert)    return LocalDate.ofInstant(   dateToConvert.toInstant(), ZoneId.systemDefault());   >    public LocalDateTime convertToLocalDateTime(Date dateToConvert)    return LocalDateTime.ofInstant(   dateToConvert.toInstant(), ZoneId.systemDefault());   > 

7. Заключение

В этой статье мы рассмотрели возможные способы преобразования старого java.util.Date в новые java.time.LocalDate и java.time.LocalDateTime , а также наоборот.

Полная реализация этой статьи доступна на GitHub .

Источник

Convert Java LocalDate to Date

On this page we will provide how to convert java.time.LocalDate into java.util.Date . The LocalDate represents a date in the format yyyy-MM-dd such as 2019-05-08. We can use following method and constructor to create a Date object.
1. Date.from(instant): Obtains an instance of Date from an Instant object. We can use ZonedDateTime or Timestamp to get Instant . The ZonedDateTime and Timestamp can be obtained using LocalDateTime and LocalDateTime can be obtained using LocalDate .

2. Date(long date): Constructor that creates Date object and initializes it to represent the specified number of milliseconds. We can use Timestamp.getTime() to get time in milliseconds.

Contents

1. Using LocalDate.atTime

LocalDate.atTime method combines this date with a given time to create a LocalDateTime . The LocalDateTime.atZone combines this date-time with a time-zone to create a ZonedDateTime . The ZonedDateTime.toInstant converts this date-time to an Instant . Now we will pass this Instant instance to Date.from method that will return a java.util.Date instance.
Example:

LocalDate localDate = LocalDate.parse("2019-05-08"); Instant instant = localDate.atTime(LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant(); Date date = Date.from(instant); System.out.println(date); //Wed May 08 00:00:00 IST 2019

2. Using LocalDate.atStartOfDay

Example-1: LocalDate.atStartOfDay(zone) returns a zoned date-time from this date at the earliest valid time according to the rules in the time-zone.

LocalDate localDate = LocalDate.parse("2019-05-08"); Instant instant = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant(); Date date = Date.from(instant); System.out.println(date); //Wed May 08 00:00:00 IST 2019

Example-2: LocalDate.atStartOfDay() combines this date with the time of midnight to create a LocalDateTime at the start of this date.

LocalDate localDate = LocalDate.parse("2019-05-08"); Instant instant = localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant(); Date date = Date.from(instant); System.out.println(date); //Wed May 08 00:00:00 IST 2019

3. Using LocalDateTime.of

LocalDate localDate = LocalDate.parse("2019-05-08"); Instant instant = LocalDateTime.of(localDate, LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant(); Date date = Date.from(instant); System.out.println(date); //Wed May 08 00:00:00 IST 2019

4. Using Timestamp.valueOf

Timestamp.valueOf(dateTime) obtains an instance of Timestamp from a LocalDateTime object.

Example-1: Instantiate LocalDateTime using LocalDate.atTime method.

LocalDate localDate = LocalDate.parse("2019-05-08"); Instant instant = Timestamp.valueOf(localDate.atTime(LocalTime.MIDNIGHT)).toInstant(); Date date = Date.from(instant); System.out.println(date); //Wed May 08 00:00:00 IST 2019
LocalDate localDate = LocalDate.parse("2019-05-08"); Instant instant = Timestamp.valueOf(LocalDateTime.of(localDate, LocalTime.MIDNIGHT)).toInstant(); Date date = Date.from(instant); System.out.println(date); //Wed May 08 00:00:00 IST 2019
LocalDate localDate = LocalDate.parse("2019-05-08"); Timestamp timestamp = Timestamp.valueOf(localDate.atTime(LocalTime.MIDNIGHT)); Date date = new Date(timestamp.getTime()); System.out.println(date); //Wed May 08 00:00:00 IST 2019

Complete Example

package com.concretepage; import java.sql.Timestamp; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; import java.util.Date; public class LocalDateToDate < public static void main(String[] args) < LocalDate localDate = LocalDate.parse("2019-05-08"); Instant instant = localDate.atTime(LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant(); Date date = Date.from(instant); System.out.println(date); instant = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant(); date = Date.from(instant); System.out.println(date); instant = localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant(); date = Date.from(instant); System.out.println(date); instant = LocalDateTime.of(localDate, LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant(); date = Date.from(instant); System.out.println(date); instant = Timestamp.valueOf(localDate.atTime(LocalTime.MIDNIGHT)).toInstant(); date = Date.from(instant); System.out.println(date); instant = Timestamp.valueOf(LocalDateTime.of(localDate, LocalTime.MIDNIGHT)).toInstant(); date = Date.from(instant); System.out.println(date); Timestamp timestamp = Timestamp.valueOf(localDate.atTime(LocalTime.MIDNIGHT)); date = new Date(timestamp.getTime()); System.out.println(date); >>
Wed May 08 00:00:00 IST 2019 Wed May 08 00:00:00 IST 2019 Wed May 08 00:00:00 IST 2019 Wed May 08 00:00:00 IST 2019 Wed May 08 00:00:00 IST 2019 Wed May 08 00:00:00 IST 2019 Wed May 08 00:00:00 IST 2019

Источник

Java – Convert LocalDate to Date

In this guide, we will see how to convert LocalDate to Date. Before we see the code for the conversion, lets see what’s the difference between Date and LocalDate.

java.util.Date - date + time + timezone java.time.LocalDate - only date

So to convert the LocalDate to Date, we must append the time and timezone info with the date. Keeping this in mind, the steps for the conversion are as follows:

1. Getting the default time zone so we can append the timezone info with the date
2. Calling atStartOfDay() so that we can append the time with the date
3. LocalDate to Date – local date + atStartOfDay() + default time zone + toInstant() = Date

LocalDate to Date conversion

import java.time.LocalDate; import java.time.ZoneId; import java.util.Date; public class Example < public static void main(String[] args) < //default time zone ZoneId defaultZoneId = ZoneId.systemDefault(); //creating the instance of LocalDate using the day, month, year info LocalDate localDate = LocalDate.of(2016, 8, 19); //local date + atStartOfDay() + default time zone + toInstant() = Date Date date = Date.from(localDate.atStartOfDay(defaultZoneId).toInstant()); //Displaying LocalDate and Date System.out.println("LocalDate is: " + localDate); System.out.println("Date is: " + date); >>
LocalDate is: 2016-08-19 Date is: Fri Aug 19 00:00:00 IST 2016

About the Author

I have 15 years of experience in the IT industry, working with renowned multinational corporations. Additionally, I have dedicated over a decade to teaching, allowing me to refine my skills in delivering information in a simple and easily understandable manner.

Источник

Оцените статью