itsource

localDate to java.util.날짜 및 그 반대도 단순 변환입니까?

mycopycode 2022. 7. 17. 00:15
반응형

localDate to java.util.날짜 및 그 반대도 단순 변환입니까?

거기에 있는 간단한 방법간단한 변환방법이 있나요 변환할 수 있을까요?LocalDate(자바 8로 하여 출시된)대해서(자바 8에서 도입)에.java.util.Date오브제?오브젝트?

'심플'이란 다음과 같이 단순함을 의미합니다.

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

좀 어색한 것 같아요.

날짜 부분에만 관심이 있고 어느 오브젝트에도 시간대 정보가 없기 때문에 시간대를 명시적으로 도입하는 이유는 무엇입니까?변환에는 심야시간과 시스템 디폴트타임존을 암묵적으로 사용해야 합니다.

dr;dr

LocalDate(Java 8에서 도입)를 java.util로 간단하게 변환할 수 있는 방법이 있습니까?날짜 객체?'심플'이란 이보다 더 단순하다는 뜻이다.

아뇨, 당신은 제대로, 그리고 가능한 한 간결하게 해냈어요

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에서는 더 일찍 새로운 날이 밝아옵니다.

그래서 date-only(따라서 날짜만 변환하는 경우(전환시키는데 있다.LocalDate)을(를)일시에적용해야합니다.ZoneId)zoned 값(존 값을 취득한다() 한다.ZonedDateTime탭을 클릭한 다음 협정 세계시(CoordinatedUniversalTime()로 이행합니다로 왔다.Instant)a)의 정의에 일치시킵니다의 정의와 일치시킵니다.java.util.Date.

세부 사항

첫째, 첫 번째, 다음과 같은 오래된 날짜-시간 클래스는 피합니다 같은 오래 된 유산 날짜-타임 스탬프 수업을 피한다.java.util.Date가능한 한.그것들은 설계가 서툴고, 혼란스럽고, 번거롭다.실제로는 여러 가지 이유로 java.time 클래스로 대체되었습니다.

그러나 필요한 경우 java.time 유형에서 이전 유형으로 변환할 수 있습니다.이전 클래스에 추가된 새 변환 메서드를 찾습니다.

Java의 모든 날짜 유형(현대 및 레거시) 표

java.util.Date→ →java.time.LocalDate

마음에 있는주의해 주세요한다.java.util.Date날짜와 시각(UTC)을 더한 값을 나타내기 때문에 오칭입니다.반면 클래스는 시간대 없이 날짜만 값을 나타냅니다.

시작점에서java.util.Datejava.time 방법은 동일한 수업에동등한 클래스의 java.time은으로 변환합니다.java.time.Instant이 클래스는 타임라인상의 순간을 UTC 단위나노초(최대 소수점 이하 9자리)의 분해능으로 나타냅니다.

Instant instant = myUtilDate.toInstant();

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

표준 시간대는 날짜를 결정하는 데 매우 중요합니다.날짜는 지역에 따라 전 세계적으로 다릅니다.예를 들어 프랑스 파리에서는 자정 몇 분 후가 새로운 날이고 몽트레알 퀘벡에서는 여전히 "어제"입니다.

는 그 합니다.Instant타임 존으로 이동합니다.는 we we we we we we we weZoneIdZonedDateTime.

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

.LocalDate.

LocalDate ld = zdt.toLocalDate();

java.time.LocalDatejava.util.Date

다른 방향으로 이동하려면java.time.LocalDate a까지java.util.Date즉, 데이트 타임에서 데이트 타임으로 이행하는 것입니다.따라서 시간을 지정해야 합니다.당신은 아마 하루의 첫 순간을 위해 가고 싶을 거예요.라고는 생각하지 않는다.00:00:00 Time 여름 시간) 등의 는 첫 번째 이 될 수 01:00:00이 java.time을 하여 이 atStartOfDay LocalDate.

ZonedDateTime zdt = myLocalDate.atStartOfDay( z );

, 그럼 이제 요.Instant.

Instant instant = zdt.toInstant();

변환 Instant로로 합니다.java.util.Date를 호출합니다.

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

상세 정보


java.time 정보

java.time 프레임워크는 Java 8 이후에 포함되어 있습니다.이러한 클래스는 , 및 등 문제가 많은 오래된 레거시 날짜 시간 클래스를 대체합니다.

자세한 내용은 Oracle 자습서를 참조하십시오.또한 Stack Overflow를 검색하여 많은 예와 설명을 확인하십시오.사양은 JSR 310입니다.

현재 유지보수 모드에 있는 조다 타임 프로젝트는 java.time 클래스로의 이행을 권장합니다.

java.time 객체를 데이터베이스와 직접 교환할 수 있습니다.JDBC 4.2 이후준거한JDBC 드라이버를 사용합니다.스트링도 필요 없고java.sql.*반.휴지 상태 5 및 JPA 2.2는 java.time을 지원합니다.

java.time 클래스는 어디서 얻을 수 있습니까?

Java 또는 Android 버전에 사용할 java.time 라이브러리의 표

쓰리텐 엑스트라 프로젝트는 java.time을 추가 클래스로 확장합니다.이 프로젝트는 향후 java.time에 추가될 수 있는 가능성을 입증하는 기반입니다.여기에는 , , , 유용한 클래스가 있습니다.

면책사항:아래 답변은 유효하지만 프로덕션 코드에서 사용하는 것은 권장되지 않습니다.이 경우 바질의 답변에 있는 접근 방식을 따라야 합니다.

사실, 있다.에 정적 메서드 값 Of가 있습니다.java.sql.Date정확히 그렇게 하는 객체입니다.그래서 우리는

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

그리고 이것이 마지막입니다.로컬 타임존이 암묵적으로 사용되므로 타임존의 명시적인 설정은 없습니다.

문서로부터:

지정된 LocalDate는 로컬 시간대의 로컬 날짜로 해석됩니다.

java.sql.Date서브클래스java.util.Date그래서 그 결과는java.util.Datediscloss.discloss.

또한 역방향 동작의 경우 java.sql에는 toLocalDate 메서드가 있습니다.날짜 클래스다음과 같은 것이 있습니다.

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

날짜 -> Local 날짜:

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

Local Date -> 날짜:

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

날짜에서 로컬 날짜로

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

Local Date to Date(로컬 날짜)

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

LocalDateTime을 java.util로 변환하고 있습니다.날짜.

    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);

나는 아래의 해결책으로 이 문제를 해결했다.

  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);

이 경우 localDate는 "yyy-MM-dd" 형식으로 날짜를 인쇄합니다.

은 할 수 있어요.java.util.Date를 제기하다Stringobject: "yyy-mm-dd"로 합니다.

에는 LocalDate가 .parse을 「」로.LocalDate를 사용하여 분석됩니다.DateTimeFormatter로 지정됩니다.ISO_LOCAL_DATE.

날짜에서 로컬 날짜로

LocalDate.parse(Date.toString())

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

반응형