programing tip

LocalDate에서 java.util.Date로 또는 그 반대로 변환하는 가장 간단한 방법은 무엇입니까?

itbloger 2020. 7. 27. 07:38
반응형

LocalDate에서 java.util.Date로 또는 그 반대로 변환하는 가장 간단한 방법은 무엇입니까? [복제]


이 질문에는 이미 답변이 있습니다.

LocalDate(Java 8에서 도입)을 java.util.Date객체 로 변환하는 간단한 방법이 있습니까?

'단순'으로, 나는 이것보다 단순하다는 것을 의미합니다.

Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

그것은 조금 어색해 보입니다.

우리는 날짜 부분에만 관심이 있고 어떤 객체에도 시간대 정보가 없으므로 왜 시간대를 명시 적으로 도입합니까? 자정 시간과 시스템 기본 시간대는 암시 적으로 변환에 사용되어야합니다.


실제로 있습니다. 정확히 그렇게 하는 객체 에는 정적 메소드 valueOfjava.sql.Date 가 있습니다. 그래서 우리는

java.util.Date date = java.sql.Date.valueOf(localDate);

그리고 그게 다야. 현지 시간대가 암시 적으로 사용되므로 시간대를 명시 적으로 설정하지 않습니다.

문서에서 :

제공된 LocalDate는 현지 시간대의 현지 날짜로 해석됩니다.

java.sql.Date서브 클래스 java.util.Date, 그래서 결과는이다 java.util.Date또한.

그리고 리버스 조작 을 위해 java.sql.Date 클래스에 toLocalDate 메소드가 있습니다. 그래서 우리는 :

LocalDate ld = new java.sql.Date(date.getTime()).toLocalDate();


tl; dr

LocalDate (Java 8에 도입)를 java.util.Date 객체로 변환하는 간단한 방법이 있습니까? '단순하다'는 이보다 더 단순한 의미입니다

아니. 당신은 적절하고 간결하게 그것을했습니다.

java.util.Date.from(                     // Convert from modern java.time class to troublesome old legacy class.  DO NOT DO THIS unless you must, to inter operate with old code not yet updated for java.time.
    myLocalDate                          // `LocalDate` class represents a date-only, without time-of-day and without time zone nor offset-from-UTC. 
    .atStartOfDay(                       // Let java.time determine the first moment of the day on that date in that zone. Never assume the day starts at 00:00:00.
        ZoneId.of( "America/Montreal" )  // Specify time zone using proper name in `continent/region` format, never 3-4 letter pseudo-zones such as “PST”, “CST”, “IST”. 
    )                                    // Produce a `ZonedDateTime` object. 
    .toInstant()                         // Extract an `Instant` object, a moment always in UTC.
)

아래에서 문제를 읽고 생각해보십시오. 어떻게 더 간단 할 수 있습니까? 날짜가 몇시에 시작되는지 물어 보면 어떻게 대답 할 수 있습니까? "어디?" 파리 FR에서 몬트리올 CA보다 더 일찍, 콜카타 IN에서 더 일찍, 심지어는 오클랜드 NZ에서 새로운 순간이 시작됩니다.

날짜 만 (변환에 그래서 LocalDate우리는 날짜 - 시간에) 있어야 시간대를 적용 ( ZoneId)는 존 값을 (얻을 ZonedDateTime), 다음 (UTC로 이동 Instanta의 정의와 일치하는) java.util.Date.

세부

첫째, java.util.Date가능할 때마다 기존 레거시 날짜-시간 수업을 피하십시오 . 그것들은 잘못 설계되고 혼란스럽고 번거 롭습니다. 실제로 여러 가지 이유로 java.time 클래스로 대체되었습니다 .

그러나 필요한 경우 java.time 유형에서 이전 유형으로 변환 할 수 있습니다. 이전 클래스에 추가 된 새로운 변환 방법을 찾으십시오.

java.util.Datejava.time.LocalDate

a java.util.DateUTC를 기준 으로 날짜 시간을 나타 내기 때문에 잘못된 이름 임을 명심하십시오 . 반대로, LocalDate클래스는 시간이없고 시간대가없는 날짜 전용 값을 나타냅니다.

가는에서 java.util.Date의 등가 클래스로 변환 수단에 java.time java.time.Instant. Instant클래스는 나노초 의 해상도 (소수점의 최대 9 자리)로 UTC 의 타임 라인에서 순간을 나타냅니다 .

Instant instant = myUtilDate.toInstant();

LocalDate클래스는 시간이없고 시간대가없는 날짜 전용 값을 나타냅니다.

시간대는 날짜를 결정하는 데 중요합니다. 주어진 순간마다 날짜는 지구마다 다릅니다. 예를 들어 파리 에서 자정이 지나고 몇 분 후에 프랑스 는 새로운 날이며 몬트리올 퀘벡 에서는 여전히 "어제"입니다 .

따라서 Instant시간대로 이동해야합니다 . 우리는를 신청 ZoneId합니다 ZonedDateTime.

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

거기서 날짜 만 요청하십시오 LocalDate.

LocalDate ld = zdt.toLocalDate();

java.time.LocalDatejava.util.Date

다른 방향으로 이동하려면 a에서 a java.time.LocalDatejava.util.Date, 날짜 만에서 날짜-시간 으로 이동 하는 것을 의미합니다. 따라서 시간을 지정해야합니다. 아마도 하루 중 첫 순간을 가고 싶을 것입니다. 하지 즉 가정합니다 00:00:00. 일광 절약 시간 (DST)과 같은 예외는 첫 번째 순간이와 같은 다른 시간 일 수 있음을 의미합니다 01:00:00. 를 호출 atStartOfDay하여 java.time이 해당 값을 판별하도록 하십시오 LocalDate.

ZonedDateTime zdt = myLocalDate.atStartOfDay( z );

이제를 추출하십시오 Instant.

Instant instant = zdt.toInstant();

을 호출 Instant하여 java.util.Date변환하십시오 from( Instant ).

java.util.Date d = java.util.Date.from( instant );

더 많은 정보

Table of date-time types in Java, both legacy and modern.


java.time에 대하여

The java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.

The Joda-Time project, now in maintenance mode, advises migration to the java.time classes.

To learn more, see the Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310.

You may exchange java.time objects directly with your database. Use a JDBC driver compliant with JDBC 4.2 or later. No need for strings, no need for java.sql.* classes.

Where to obtain the java.time classes?

Table of which java.time library to use with which version of Java or Android

The ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as Interval, YearWeek, YearQuarter, and more.


Date -> LocalDate:

LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

LocalDate -> Date:

Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

Date to LocalDate

Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

LocalDate to Date

LocalDate localDate = LocalDate.now();
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

Converting LocalDateTime to java.util.Date

    LocalDateTime localDateTime = LocalDateTime.now();

    ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneOffset.systemDefault());

    Instant instant = zonedDateTime.toInstant();

    Date date = Date.from(instant);

System.out.println("Result Date is : "+date);

I solved this question with solution below

  import org.joda.time.LocalDate;
  Date myDate = new Date();
  LocalDate localDate = LocalDate.fromDateFields(myDate);
  System.out.println("My date using Date" Nov 18 11:23:33 BRST 2016);
  System.out.println("My date using joda.time LocalTime" 2016-11-18);

In this case localDate print your date in this format "yyyy-MM-dd"


You can convert the java.util.Date object into a String object, which will format the date as yyyy-mm-dd.

LocalDate has a parse method that will convert it to a LocalDate object. The string must represent a valid date and is parsed using DateTimeFormatter.ISO_LOCAL_DATE.

Date to LocalDate

LocalDate.parse(Date.toString())

참고URL : https://stackoverflow.com/questions/33066904/localdate-to-java-util-date-and-vice-versa-simplest-conversion

반응형