Java 8은 Lambda Expressions, Streams 및 몇 가지 사소한 개선 사항 외에도이 자습서에서 API를 통해 Java 8을 사용하는 방법을 배웠습니다. Java의 날짜, 달력 및 시간 처리는 항상 비판을 받았으며, 특히 Java.util.date를 수정 가능한 것으로 정의하고 SimpledateFormat를 비 스레드-안전으로 구현하기로 한 결정. Java는 시간 및 날짜 기능에 대한 더 나은 지원을 제공해야한다는 것을 깨달았으며, 이는 Joda Time and Date Library를 사용하는 데 사용되는 커뮤니티에도 좋습니다. 이 새로운 시간 및 날짜 라이브러리의 가장 큰 장점은 인스턴트 (순간), 시간 (시간), 날짜 (날짜), 시간 (시간), 시간대 (시간 영역) (시간 영역)와 같은 시간 및 날짜와 관련된 일부 개념을 명확하게 정의한다는 것입니다. -존) 및 기간 (기간). 또한 인간과 기계 사이의 시간과 날짜에 대한 이해를 구별하는 것과 같이 Joda 라이브러리의 장점 중 일부를 이끌어냅니다. Java 8은 여전히 ISO의 캘린더 시스템을 사용하며 전임자와 달리 Java.Time 패키지의 클래스는 불변적이고 스레드 안전합니다. 새로운 Time and Date API는 Java.Time 패키지에 있습니다.
1. instant-It는 타임 스탬프를 나타냅니다
2. LocalDate-2014-01-14와 같은 특정 시간을 포함하지 않는 데이터. 생일, 기념일, 유도 날짜 등을 저장하는 데 사용할 수 있습니다.
3. localtime- 날짜가없는 시간을 나타냅니다
4. localdateTime-IT에는 날짜와 시간이 포함되어 있지만 여전히 오프셋 정보 나 시간대가 없습니다.
5. ZONEDDATETIME- 시간대가 포함 된 완전한 날짜와 시간이며 오프셋은 UTC/Greenwich 시간을 기준으로합니다.
새로운 라이브러리는 또한 ZoneOffset 및 Zoned를 추가하여 시간대를 더 잘 지원할 수 있습니다. 새로운 DateTimeFormatter를 통해 날짜의 구문 분석 및 형식도 새로워졌습니다. 이 기사를 언급하면서 나는 Java가 작년 에이 새로운 기능을 출시하려고했을 때이 기사를 썼으므로 예제의 시간은 여전히 작년에 나왔다는 것을 알게 될 것입니다. 이 예제를 실행하면 반환 값이 확실히 정확합니다.
Java 8은 시간과 날짜를 어떻게 처리합니까?
누군가 새로운 도서관을 배우는 가장 좋은 방법은 무엇입니까? 내 대답은 실제 프로젝트에서 사용하는 것입니다. 실제 프로젝트에는 다양한 요구가있어 개발자 가이 새로운 라이브러리를 탐색하고 연구 할 수 있습니다. 요컨대, 과제 자체만이 실제로 탐험하고 배우도록 격려 할 것입니다. Java 8의 새로운 날짜와 시간 API에 대해서도 마찬가지입니다. 이 새로운 Java 8의 라이브러리를 배우기 위해 여기서는 20 개의 작업 지향 예제를 만들었습니다. Java 8 Time and Date 라이브러리를 사용하여 오늘 대표하는 방법과 같은 간단한 작업부터 시작한 다음 시간과 시간대가있는 완전한 날짜를 추가로 생성 한 다음 개발과 같은보다 실용적인 작업을 완료하는 방법을 연구하십시오. 생일, 일요일 기념일, 다음 청구일, 다음 프리미엄 일 또는 신용 카드 만료 날짜와 같은 특정 날짜 이전에 며칠이있을 수있는 알림 신청서.
예 1 Java 8에서 하루의 날짜를 얻는 방법
Java 8에는 LocalDate라는 클래스가 있으며 오늘 날짜를 나타내는 데 사용할 수 있습니다. 이 클래스는 날짜와 시간이 포함되어 있기 때문에 java.util.date와 약간 다릅니다. 따라서 시간을 포함하지 않고 날짜를 대표 하면서만 사용할 수 있습니다.
코드 사본은 다음과 같습니다.
LocalDate 오늘 = LocalDate.now (); "오늘의 현지 날짜 :" + 오늘);
산출
오늘의 현지 날짜 : 2014-01-14
시간 정보없이 오늘의 날짜를 생성한다는 것을 알 수 있습니다. 또한 날짜를 형식화 한 다음 이전 날짜 클래스와 달리 인쇄 된 데이터가 형성되지 않습니다.
예 2 Java 8의 현재 연도, 월, 일을 얻는 방법
LocalDate 클래스는 연도, 월, 일 및 기타 날짜 속성을 추출하는 몇 가지 편리한 방법을 제공합니다. 이 방법을 사용하면 java.util.calendar와 같은 클래스를 사용하지 않고 필요한 날짜 속성을 얻을 수 있습니다.
코드 사본은 다음과 같습니다.
현지 데이트 오늘 = localdate.now ();
int year = today.getyear ();
int month = today.getMonthValue ();
int day = today.getdayofmonth ();
System.out.printf ( "연도 : %d 달 : %d 일 : %d /t %n", 연도, 월, 일);
산출
오늘의 현지 날짜 : 2014-01-14
연도 : 2014 개월 : 1 일 : 14
보시다시피, Java 8에서 연도 및 월 정보를 얻는 것은 매우 간단합니다. 메모리없이 해당 Getter 방법을 사용하면 매우 직관적입니다. Java에서 현재 연도, 월 및 일을 얻는 오래된 글쓰기 방법과 비교할 수 있습니다.
예 3 Java 8에서 특정 날짜를 얻는 방법
첫 번째 예에서, 우리는 정적 메소드를 통해 날짜를 생성하는 것이 매우 간단하다는 것을 알 수 있지만, 또 다른 유용한 공장 메소드 LocalDate.of ()를 통해 매개 변수를 수락하는 날짜를 만들 수 있습니다. 연도, 월 및 일의 다음 동등한 LocalDate 인스턴스를 반환합니다. 이 방법에 대한 또 다른 좋은 소식은 이전 API에서 실수를하지 않았다는 것입니다. 예를 들어, 아래의 날짜에 대해 쓴 것은 아래의 예에서 1 월 14 일을 나타내며 숨겨진 논리는 없습니다.
코드 사본은 다음과 같습니다.
LocalDate dateofBirth = localDate.Of (2010, 01, 14);
System.out.println ( "생년월일은 다음과 같습니다." + dateofbirth);
생산량 : 생년월일은 : 2010-01-14입니다
창조 날짜는 2014 년 1 월 14 일 우리가 쓴 것임을 알 수 있습니다.
예 4 Java 8에서 두 날짜가 동일인지 확인하는 방법
실제로 처리 시간과 날짜를 처리하는 실제 작업에 대해 이야기하는 경우 두 날짜가 동일인지 확인하는 것입니다. 오늘이 생일, 기념일 또는 휴일과 같은 특별한 날인지 여부에 대해 종종 질문을받을 수 있습니다. 때때로, 당신은 그것이 특정 날인지, 예를 들어 휴일인지 확인하기 위해 날짜가 주어질 것입니다. 다음 예는 Java 8에서 이러한 유형의 작업을 완료하는 데 도움이됩니다. 생각할 수 있듯이 LocalDate는 다음과 같이 날짜를 비교하기 위해 Equals 메소드를 무시합니다.
코드 사본은 다음과 같습니다.
LocalDate Date1 = LocalDate.of (2014, 01, 14);
System.out.printf ( "오늘 %s 및 날짜 1 %s는 동일한 날짜 %n", 오늘, date1);
}
산출
오늘 2014-01-14 및 날짜 1 2014-01-14는 같은 날짜입니다
이 경우 비교 한 두 날짜는 동일합니다. 동시에, 코드에서 형식화 된 날짜 문자열을 가져 오면 비교하기 전에 날짜로 구문 분석해야합니다. 이 예제를 Java가 이전 날짜를 비교하는 방식과 비교할 수 있으며, 그것이 매우 흥미 롭다는 것을 알 수 있습니다.
예 5 Java 8에서 중복 이벤트를 확인하는 방법, 생일 말
Java의 시간과 날짜와 관련된 또 다른 실질적인 작업이 있습니다. 이는 월별 청구 일, 결혼 기념일, 월별 상환 일 또는 매년 보험료를 지불하는 날과 같은 중복 행사를 확인하는 것입니다. 전자 상거래 회사에서 일한다면, 크리스마스, 추수 감사절 및 인도와 같은 모든 중요한 휴가에서 생일 소원을 사용자에게 보내고 인사말을 보내는 모듈이있을 것입니다. 제전. Java의 축제인지 중복 행사인지를 결정하는 방법은 무엇입니까? Monthday 클래스를 사용하십시오. 이 수업은 월과 일로 구성되며 연도 정보가 포함되어 있지 않으므로 매년 반복적으로 나타나는 며칠을 나타낼 수 있습니다. 물론, 연말 수업과 같은 다른 조합이 있습니다. 또한 새로운 시간 및 날짜 라이브러리의 다른 클래스와 마찬가지로 불변적이고 실로 안전하며 가치 클래스이기도합니다. 예제를 사용하여 월요일을 사용하여 중복 날짜를 확인하는 방법을 살펴 보겠습니다.
코드 사본은 다음과 같습니다.
LocalDate dateofBirth = localDate.Of (2010, 01, 14);
월데이트 생일 = 월요일.
Monthday Currentthday = Monthday.from (오늘);
if (currentmonthday.equals (생일)) {
System.out.println ( "오늘의 많은 행복한 반환 !!");
}또 다른{
System.out.println ( "죄송합니다. 오늘은 생일이 아닙니다");
}
출력 : 오늘의 많은 행복한 반환 !!
몇 년은 다르지만 오늘은 생일이므로 생일 소망이 생겨납니다. 시스템 시간을 조정하고 프로그램을 실행하여 다음 생일이있을 때 다음 생일과 함께 Junit Unit 테스트를 작성하여 코드가 올바르게 실행될 수 있는지 확인할 수 있습니다.
예 6 Java 8에서 현재 시간을 얻는 방법
이것은 첫 번째 예에서 현재 날짜를 얻는 것과 매우 유사합니다. 이번에는 LocalTime이라는 클래스를 사용하고 있습니다. LocalTime은 날짜가없는 시간이며 LocalDate에 비해 가깝습니다. 여기에서 정적 공장 메소드를 사용하여 현재 시간을 얻을 수 있습니다. 기본 형식은 HH : MM : SS : NNN이며, 여기서 NNN은 나노 초입니다. 이전에 Java 8에서 현재 시간을 얻는 방법과 비교할 수 있습니다.
코드 사본은 다음과 같습니다.
localtime = localtime.now (); "현지 시간 :" + 시간;
산출
현지 시간 : 16 : 33 : 33.369 // 시간, 분, 초, 나노 초
보시다시피, 현지 시간에는 시간과 날짜가 없기 때문에 현재 시간에는 날짜가 포함되지 않습니다.
예 7 시간 수를 늘리는 방법
미래 시간을 계산하기 위해 시간, 몇 분 또는 초를 추가해야합니다. Java 8은 불변 및 스레드 안전 클래스를 제공 할뿐만 아니라 원래 Add () 메소드를 대체하기위한 Plushours ()와 같은보다 편리한 방법을 제공합니다. 그건 그렇고, 이러한 방법은 LocalTime이 불변이기 때문에 새로운 LocalTime 인스턴스에 대한 참조를 반환합니다.이 새로운 참조를 저장하는 것을 잊지 마십시오.
코드 사본은 다음과 같습니다.
로컬 타임 시간 = localtime.now ();
localtime newtime = time.plushours (2);
System.out.println ( "2 시간 후 시간 :" + newtime);
산출:
2 시간 후 시간 : 18 : 33 : 33.369
현재 시간은 2 시간 후에 16 : 33 : 33.369임을 알 수 있습니다. 이제 Java의 시간을 추가하거나 줄이는 오래된 방법과 비교할 수 있습니다. 언뜻보기에 어떤 방법이 더 나은지 알 수 있습니다.
예 8 1 주 후 날짜를 얻는 방법
이것은 2 시간 후에 시간을 얻는 이전의 예와 유사합니다. 여기서 우리는 1 주 후에 날짜를 얻는 방법을 배웁니다. LocalDate는 시간없이 날짜를 나타내는 데 사용됩니다. Plus () 메소드는 하루, 주 또는 월을 추가 할 수 있으며이 시간 단위를 나타내는 데 사용됩니다. LocalDate도 불변이기 때문에 모든 수정 작업은 새 인스턴스를 반환하므로 저장하는 것을 잊지 마십시오.
코드 사본은 다음과 같습니다.
LocalDate Nextweek = 오늘 .Plus (1, Chronounit.weeks);
System.out.println ( "오늘은 :" + 오늘);
System.out.println ( "1 주일 이후 날짜 :" + Nextweek);
산출:
오늘은 : 2014-01-14입니다
1 주일 이후 날짜 : 2014-01-21
7 일, 즉 일주일 내에 날짜가 무엇인지 알 수 있습니다. 이 방법을 사용하여 한 달, 해, 시간, 분 또는 10 년을 추가하고 Java API의 크로노 니트 클래스를 확인하여 더 많은 옵션을 얻을 수 있습니다.
예제 9 1 년
이것은 이전 예의 속편입니다. 위의 예에서는 LocalDate 's Plus () 메소드를 사용하여 날짜, 주 또는 월을 날짜에 추가하는 방법을 배웠습니다.
코드 사본은 다음과 같습니다.
LocalDate previousyear = today.minus (1, chronounit.years);
System.out.println ( "1 년 전 날짜 :" + previousyear);
LocalDate nextyear = today.plus (1, 년);
System.out.println ( "1 년 후 날짜 :" + nextyear);
산출:
1 년 전 날짜 : 2013-01-14
1 년 후 날짜 : 2015-01-14
2013 년에는 2 년, 2015 년에는 2 년, 2014 년 주변의 해가 있음을 알 수 있습니다.
예 10 Java 8에서 클럭 사용
Java 8에는 시계 클래스가 제공되며 특정 시간대에서 현재 순간, 날짜 또는 시간을 얻는 데 사용할 수 있습니다. System.CurrentTimeInmillis () 및 TimeZone.getDefault () 메소드 대신 클럭을 사용할 수 있습니다.
코드 사본은 다음과 같습니다.
// 시스템 시계를 기준으로 현재 시간을 반환하고 UTC로 설정합니다.
클럭 시계 = clock.systemutc ();
System.out.println ( "Clock :" + Clock);
// 시스템 시계 영역을 기준으로 시간을 반환합니다. clock defaultClock =
clock.systemdefaultzone ();
System.out.println ( "Clock :" + Clock);
산출:
시계 : SystemClock [Z]
시계 : SystemClock [Z]
이 시계를 지정된 날짜와 비교할 수 있습니다.
코드 사본은 다음과 같습니다.
공개 클래스 myclass {
비공개 클럭 시계; / 종속성 주입 ...
공개 무효 프로세스 (LocalDate EventDate) {
if (eventDate.isbefore (localDate.now (clock)) {
...
}
}
}
다른 시간대에서 날짜를 처리 해야하는 경우 매우 편리합니다.
예 11 Java의 날짜 전후 날짜 여부를 결정하는 방법
이것은 또한 실제 프로젝트에서 일반적인 작업입니다. 날짜가 다른 날짜 전후 또는 정확히 동일인지 어떻게 알 수 있습니까? Java 8에서, LocalDate 클래스에는 isbefore () 및 isafter () 메소드가있어 두 날짜를 비교하는 데 사용할 수 있습니다. 메소드를 호출 날짜가 주어진 날짜보다 이른 경우 isbefore () 메소드는 true를 반환합니다.
코드 사본은 다음과 같습니다.
LocalDate 내일 = LocalDate.of (2014, 1, 15);
System.out.println ( "오늘 이후에 온다");
}
LocalDate 어제 = 오늘 .minus (1, 일);
if (어제. 앞서 (오늘)) {
System.out.println ( "어제는 오늘 전날입니다");
}
산출:
내일은 오늘 이후에 온다
어제는 오늘 전날입니다
Java 8의 날짜는 매우 간단하다는 것을 알 수 있습니다. 비슷한 작업을 완료하기 위해 달력과 같은 다른 클래스를 사용할 필요가 없습니다.
예제 12 Java 8의 다른 시간대 처리
Java 8은 날짜와 시간을 분리 할뿐만 아니라 시간대도 있습니다. 예를 들어, 구역 관련 클래스 세트가 있으며, 예를 들어 ZoneddateTime은 시간대와 시간을 나타냅니다. Java 8 이전의 Gregoriancalendar 클래스와 동일합니다. 이 클래스를 사용하면 다음 예제와 같은 다른 시간대의 해당 시간으로 현지 시간을 변환 할 수 있습니다.
코드 사본은 다음과 같습니다.
// Java 8 Zava 8 Zava의 시간대와 시간 및 시간 ( "America/New_York");
LocalDateTime LocalTdateAndTime = LocalDateTime.now ();
ZonedDateTime DateAndTimeInnewyork = ZonedDateTime.of (LocalTdateAndTime, America);
System.out.println ( "특정 시간대의 현재 날짜 및 시간 :" + dateandtimeinnewyork);
산출:
특정 시간대의 현재 날짜 및 시간 : 2014-01-14T16 : 33 : 33.373-05 : 00 [America/New_York]
현지 시간을 GMT 시간으로 전환하는 이전 방법과 비교할 수 있습니다. 그건 그렇고, Java 8 이전과 마찬가지로 시간대에 해당하는 텍스트를 잘못 만들지 마십시오. 그렇지 않으면 그러한 예외가 발생합니다.
코드 사본은 다음과 같습니다.
스레드의 예외 "main"java.time.zone.zonerulesexception : 알 수없는 시간대 ID : 아시아/도쿄
at Java.time.zone.zonerulesprovider.getProvider (Zonerulesprovider.java:272)
at Java.time.zone.zonerulesprovider.getRules (Zonerulesprovider.java:227)
at java.time.zoneregion.ofid (Zoneregion.java:120)
at java.time.zoneid.of (Zoneid.java:403)
at java.time.zoneid.of (Zoneid.java:351)
예제 13 신용 카드 만료 시간과 같은 고정 날짜를 나타내는 방법
Monthday가 반복되는 날을 나타내는 것처럼, 연말은 다른 조합으로, 신용 카드 상환 날짜, 고정 예금 만기 날짜, 옵션 만기 날짜와 같은 날짜를 나타냅니다. 이 클래스를 사용하여 그 달에 며칠이 있는지 확인할 수 있습니다.
코드 사본은 다음과 같습니다.
연말 currentyearmonth = yearmonth.now ();
Yearmonth Creditcardexpiry = Yearmonth.of (2018, 월. 2 월);
System.out.printf ( "귀하의 신용 카드는 %S %N으로 만료됩니다", CreditCardExpiry);
산출:
2014-01 : 31의 월 연도
신용 카드는 2018-02로 만료됩니다
예제 14 Java 8에서 도약 연도를 확인하는 방법
이것은 복잡하지 않습니다. LocalDate 클래스에는 현재 로컬 데이트에 해당하는 연도가 도약인지 여부를 반환 할 수있는 isleapyear () 메소드가 있습니다. 여전히 바퀴를 재현하고 싶다면이 코드를 볼 수 있습니다.
코드 사본은 다음과 같습니다.
if (today.isleapyear ()) {
System.out.println ( "올해는 도약입니다");
}또 다른 {
System.out.println ( "2014는 도약이 아닙니다");
}
생산량 : 2014는 도약이 아닙니다
몇 년 동안 결과가 올바른지 확인할 수 있습니다.
예 15 두 날짜 사이에 며칠 및 월이 포함되어 있습니까?
또 다른 일반적인 과제는 주어진 두 날짜 사이에 며칠, 몇 주 또는 몇 년이 포함되어 있는지 계산하는 것입니다. java.time.period 클래스를 사용 하여이 기능을 완료 할 수 있습니다. 다음 예에서는 현재 날짜가 향후 날짜와 몇 개월이 분리 된 수를 계산합니다.
코드 사본은 다음과 같습니다.
LocalDate Java8Release = localDate.Of (2014, Month.March, 14);
주기 기간 TONEXTJAVARELEASE =
기간 (오늘, Java8Release);
System.out.println ( "오늘과 Java 8 사이에 남은 달 :" + periodtonextjavarelease.getmonths ());
산출:
오늘과 Java 8 사이에 남은 달 : 2
보시다시피, 이번 달은 1 월이고 Java 8의 출시 날짜는 3 월이므로 2 개월이 있습니다.
예제 16 시간 영역 오프셋이있는 날짜 및 시간
JAVA 8에서는 ZONOFFSET 클래스를 사용하여 인도 IS GMT 또는 UTC5 : 30과 같은 특정 시간대를 나타낼 수 있으며 (정적 메소드 ZoneOffset.of () 메서드를 사용하여 해당 시간대를 얻을 수 있습니다. 이 오프셋을 얻는 한 LocalDateTime 과이 오프셋을 사용하여 오프셋 드테인 타임을 생성 할 수 있습니다.
코드 사본은 다음과 같습니다.
LocalDateTime DateTime = LocalDateTime.of (2014 년, 14, 19, 30);
ZoneOffset Offset = ZoneOffset.of ( "+05:30");
OffSetDateTime 날짜 = OffSetDateMe.of (DateTime, Offset);
System.out.println ( "Java에서 시간대 오프셋이있는 날짜 및 시간 :" + 날짜);
산출:
Java에서 시간대 오프셋이있는 날짜 및 시간 : 2014-01-14T19 : 30+05 : 30
현재 시간과 날짜가 시간대와 관련이 있음을 알 수 있습니다. 또 다른 요점은 OffsetDateMe이 주로 기계가 이해하는 것이라면 ZoneDateTime 클래스를 사용할 수 있습니다.
예제 17 Java 8에서 현재 타임 스탬프를 얻는 방법
Java 8 이전에 현재 타임 스탬프를 얻는 방법을 아직도 기억한다면 지금은 케이크 조각입니다. 인스턴트 클래스에는 다음과 같이 현재 타임 스탬프를 반환 할 수있는 정적 공장 메소드가 있습니다.
코드 사본은 다음과 같습니다.
Instant timestamp = instant.now ();
System.out.println ( "이 순간의 가치는 무엇입니까" + 타임 스탬프);
산출:
이 순간 2014-01-14T08 : 33 : 33.379Z의 가치는 무엇입니까?
현재 타임 스탬프에는 날짜와 시간이 포함되어 있으며, 이는 java.util.date와 매우 유사합니다. 예를 들어, date.from (instant)을 예를 들어, 즉시 java.util.date로 변환하는 데 사용됩니다. 날짜 ()는 날짜를 즉시 변환하는 데 사용됩니다.
예 18 Java 8에서 사전 정의 된 Formatter를 사용하여 구문 분석/형식 날짜
Java 8 이전에는 시간 및 날짜 서식이 기술적 인 작업이었으며 SimpledateFormat은 스레드 안전이 아니며 형식의 로컬 변수로 사용하면 약간 부피가 커집니다. 스레드-로컬 변수 덕분에 멀티 스레드 환경에서는 실행 가능하지만 Java는 오랫동안이 상태를 유지해 왔습니다. 이번에는 새로운 스레드 안전 날짜 및 시간 포지터링을 소개합니다. 또한 일반적으로 사용되는 날짜 형식을 포함한 일부 사전 정의 된 Formatter가 제공됩니다. 예를 들어,이 예에서는 2014 년 2 월 14 일부터 20140114로 포맷 될 사전 정의 된 BasiciSodate 형식을 사용합니다.
코드 사본은 다음과 같습니다.
문자열 dayaftertommorrow = "20140116";
LocalDate Formatted = LocalDate.Parse (DayAftertOmmorrow,
dateTimeFormatter.basic_iso_date);
System.out.printf ( "문자열 %s에서 생성 된 날짜 %s는 %s %n", dayaftertommorrow, 형식);
산출:
String 20140116에서 생성 된 날짜는 2014-01-16입니다
생성 된 날짜가 지정된 문자열의 값과 일치한다는 것을 알 수 있습니다. 즉, 날짜 형식이 약간 다릅니다.
예 19 Java의 사용자 정의 포맷터를 사용하는 방법
위의 예에서는 내장 시간 날짜 Formatter를 사용하여 날짜 문자열을 구문 분석했습니다. 물론, 사전 정의 된 Formatter는 실제로 좋지만 때로는 사용자 정의 날짜 형식을 사용해야 할 수도 있습니다. 다음 예제의 날짜 형식은 "mmm dd yyyy"입니다. 모든 패턴을 DateTimeFormatter의 Pattern STATIC Method ()로 전달할 수 있으며,이 패턴의 문자 값은 이전 예제와 동일합니다. 예를 들어, M은 여전히 달을 나타내고 M은 여전히 세그먼트입니다. 유효하지 않은 모드는 DateTimeParseException 예외를 던지지 만 m을 사용할 때 m을 사용하는 것과 같은 논리적 오류 인 경우 할 일이 없습니다.
코드 사본은 다음과 같습니다.
String good -friday = "2014 년 4 월 18 일";
노력하다 {
dateTimeFormatter formatter = dateTimeformatter.ofPattern ( "MMM DD yyyy");
LocalDate Holiday = LocalDate.Parse (GoodFriday, Formatter);
System.out.printf ( "성공적으로 문자열 %s, 날짜는 %s %n", goodfriday, holiday);
} catch (dateMeparseException ex) {
System.out.printf ( "%s는 구문 분석 할 수 없다!%n", goodfriday);
ex.printstacktrace ();
}
산출:
2014 년 4 월 18 일, 날짜는 2014-04-18입니다
날짜의 값이 통과 된 문자열과 일치하지만 형식은 다르다는 것을 알 수 있습니다.
예 20 날짜를 포맷하고 Java 8의 문자열로 변환하는 방법
이전 두 예제에서는 DateTimeFormatter 클래스를 사용했지만 주로 날짜 문자열을 구문 분석합니다. 이 예에서 우리는 그 반대를 할 것입니다. 여기에는 LocalDateTime 클래스의 인스턴스가 있으며, 이는 형식의 날짜 문자열로 변환하려고합니다. 이것은 날짜를 Java의 문자열로 변환하는 가장 쉽고 편리한 방법입니다. 다음 예제는 형식화 된 문자열을 반환합니다. 이전 예와 동일하게 지정된 패턴 문자열을 사용하여 DateTimeFormatter 클래스의 인스턴스를 만들어야하지만 호출은 LocalDate 클래스의 구문 분석 방법이 아니라 형식 () 메소드입니다. 이 메소드는 현재 날짜를 나타내는 문자열을 반환하고 해당 패턴은 들어오는 DateTimeFormatter 인스턴스에 정의됩니다.
코드 사본은 다음과 같습니다.
LocalDateTime ArrivalDate = localDateTime.now ();
노력하다 {
DateTimeFormatter 형식 = DateTimeFormatter.ofPattern ( "MMM DD YYYY HH : MM A");
문자열 랜딩 = arrivalDate.format (형식);
System.out.printf ( "도착 : %s %n", 착륙);
} catch (dateTimeexception ex) {
System.out.printf ( "%s는 포맷 할 수 없습니다!%n", 도착);
ex.printstacktrace ();
}
출력 : 도착 : 1 월 14 일 2014 년 오후 4시 33 분
현재 시간은 주어진 "mmm dd yyyy hh : mm a"패턴으로 표현되며, 여기에는 3 개의 글자로 표시되는 월과 AM과 PM으로 표시되는 시간을 포함합니다.
Java 8의 날짜 및 시간 API의 몇 가지 핵심 사항
이 예를 읽은 후 Java 8의 새로운 시간과 날짜 API에 대한 이해가 있다고 생각합니다. 이제이 새로운 API에 대한 몇 가지 주요 요소를 검토해 봅시다.
1. 시간 영역을 처리하기 위해 javax.time.zoneid를 제공합니다.
2. 현지 운영 및 로컬 타임 클래스를 제공합니다
3. Java 8의 새로운 시간과 날짜 API의 모든 클래스는 불변의 스레드-안전이며, 이는 이전 날짜 및 캘린더 API의 반대입니다 -안전한.
4. 새로운 시간과 날짜 API의 매우 중요한 점은 순간 시간, 지속 시간, 날짜, 시간, 시간 영역 및 기간과 같은 기본 시간 및 날짜 개념을 명확하게 정의한다는 것입니다. 그것들은 모두 ISO 캘린더 시스템을 기반으로합니다.
5. 모든 Java 개발자는이 새로운 API에서 최소한 5 개의 클래스를 알아야합니다.
5.1) 순간 그것은 2014-01-14T02 : 20 : 13.592Z와 같은 타임 스탬프를 나타냅니다. 이는 java.time.clock 클래스에서 얻을 수 있습니다. 도쿄 ")). instant ();
5.2) LocalDate 2014-01-14와 같은 시간이없는 날짜를 나타냅니다. 생일, 기념일, 유도 날짜 등을 저장하는 데 사용할 수 있습니다.
5.3) LocalTime 날짜가없는 시간을 나타냅니다
5.4) LocalDateTime 시간과 날짜가 포함되어 있지만 시간대에는 상쇄가 없습니다.
5.5) ZoneddateTime 이것은 UTC/Greenwich Time을 기준으로 시간대 조정으로 풀 타임입니다.
1.이 라이브러리의 주요 패키지는 Java.Time이며 날짜, 시간, 즉석 및 기간을 나타내는 클래스를 포함합니다. 그것은 두 개의 서브 포장을 가지고 있습니다. 하나는 java.time.foramt이며, 이것이 무엇에 사용되는지 명백하고 다른 하나는 java.time.temporal이며 더 낮은 레벨에서 다양한 필드에 액세스 할 수 있습니다.
2. 시간대는 동일한 표준 시간을 공유하는 지구의 지역을 말합니다. 각 Time Zone에는 고유 식별자가 있으며 그리니치 시간부터 시작하여 지역/도시 (아시아/도쿄) 형식과 오프셋 시간도 있습니다. 예를 들어, 도쿄의 오프셋 시간은 +09 : 00입니다.
3. OffsetDateTime 클래스에는 실제로 LocalDateTime 및 ZoneOffset이 포함됩니다. 그리니치 시간 오프셋 (+/- 시간 : 분, 예를 들어 +06 : 00 또는 -08 : 00)을 포함하는 전체 날짜 (연도, 월, 일) 및 시간 (시간, 분, 나노초)을 나타냅니다.
4. DateTimeFormatter 클래스는 Java의 형식 및 파싱 날짜를 구문 분석하는 데 사용됩니다. SimpledateFormat과 달리 불변적이고 실로 안전하며 필요한 경우 정적 변수에 할당 할 수 있습니다. DateTimeFormatter 클래스는 많은 사전 정의 된 Formatter를 제공하며 원하는 형식을 사용자 정의 할 수도 있습니다. 물론 컨벤션에 따르면 문자열을 날짜로 변환하는 데 사용되는 구문 분석 () 메소드가 있으며 변환 중에 오류가 있으면 DateTimeParseException 예외가 발생합니다. 마찬가지로 DateFormatter 클래스에는 형식이 실패하면 DateTimeexception이 발생합니다.
다시 말해서, "Mmm d yyyy"와 "mmm dd yyyy"의 두 날짜 형식도 약간 다릅니다. "2014 년 1 월 2 일"에 오는 사람은 두 캐릭터가 달에 들어올 것으로 예상되기 때문에 오류를보고합니다. 이 문제를 해결하려면 하루가 단일 자리 인 경우 "2014 년 1 월 2 일"을 "2014 년 1 월 2 일"으로 변경해야합니다.
그것은 새로운 시간과 날짜 API 인 Java 8에 관한 것입니다. 이 짧은 예는이 새로운 API의 새로운 클래스를 이해하기에 충분합니다. 실제 작업에 따라 설명되므로 시간과 날짜를 처리 해야하는 Java에서 작업을 수행 할 때 더 이상 검색 할 필요가 없습니다. 날짜 인스턴스를 작성하고 수정하는 방법을 배웠습니다. 또한 순수한 날짜, 날짜 + 시간, 날짜, 시간 구역의 차이점에 대해 배웠습니다. 두 날짜를 비교하는 방법과 다음 생일, 기념일 또는 보험 날짜와 같은 특정 날짜를 특정 날짜로 찾는 방법을 알고있었습니다. 또한 스레드-로컬 변수 또는 타사 라이브러리를 사용하지 않고 스레드-안전 방식으로 Java 8의 날짜를 구문 분석하고 형식화하는 방법을 배웠습니다. 새로운 API는 모든 시간 및 날짜 관련 작업에 유능합니다.