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로 이동 Instant
a의 정의와 일치하는) java.util.Date
.
세부
첫째, java.util.Date
가능할 때마다 기존 레거시 날짜-시간 수업을 피하십시오 . 그것들은 잘못 설계되고 혼란스럽고 번거 롭습니다. 실제로 여러 가지 이유로 java.time 클래스로 대체되었습니다 .
그러나 필요한 경우 java.time 유형에서 이전 유형으로 변환 할 수 있습니다. 이전 클래스에 추가 된 새로운 변환 방법을 찾으십시오.
java.util.Date
→ java.time.LocalDate
a java.util.Date
는 UTC를 기준 으로 날짜 와 시간을 나타 내기 때문에 잘못된 이름 임을 명심하십시오 . 반대로, 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.LocalDate
→ java.util.Date
다른 방향으로 이동하려면 a에서 a java.time.LocalDate
로 java.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 );
더 많은 정보
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?
- Java SE 8, Java SE 9, and later
- Built-in.
- Part of the standard Java API with a bundled implementation.
- Java 9 adds some minor features and fixes.
- Java SE 6 and Java SE 7
- Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport.
- Android
- Later versions of Android bundle implementations of the java.time classes.
- For earlier Android (<26), the ThreeTenABP project adapts ThreeTen-Backport (mentioned above). See How to use ThreeTenABP….
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())
'programing tip' 카테고리의 다른 글
Eclipse를 실행하려면 JRE 또는 JDK가 사용 가능해야합니다. (0) | 2020.07.27 |
---|---|
iTunes 연결에서 빌드를 제거하는 방법은 무엇입니까? (0) | 2020.07.27 |
Java를 사용하여 JSONArray의 항목 멤버에 액세스 (0) | 2020.07.27 |
하나의 버킷 만 보거나 액세스하도록 액세스를 제한하는 S3 정책이 있습니까? (0) | 2020.07.27 |
Microsoft Windows 용 터미널 멀티플렉서-GNU Screen 또는 tmux 용 설치 프로그램 (0) | 2020.07.27 |