.. .Lập trình Java – IT4784 Phần I Giới thiệu Interoperating with Legacy Code • Như sáng tạo hoàn toàn mới, ngày thời gian API Java phải tương thích với lớp có, chẳng hạn java. util.Date, java. util.GregorianCalender,... (Instant) NGUYỄN ĐỨC HẬU - 20124977 Lập trình Java – IT4784 • Tương tự vậy, ZonedDateTime tương tự java. util.GregorianCalendar, lớp có phương th ức chuyển đổi Java Phương thức chuyển đổi toZonedDateTime... 15:45:50 ICT 2014 NGUYỄN ĐỨC HẬU - 20124977 Lập trình Java – IT4784 Phần II Câu hỏi trắc nghiệm 1) Câu 1:Phương thức dùng để chuyển đổi lớp java. util.Date java. time.Instant? A Date.from(instant)
Trang 1
-BÁO CÁO MÔN H C ỌC BÁCH KHOA HÀ NỘI
L P TRÌNH JAVA ẬP TRÌNH JAVA – IT4784 5.7 Interoperating with Legacy Code
MSSV: 20124977
GV h ướp: CNTT1.02 – K57 ng d n: TS Nguy n H ng Quang ẫn: TS Nguyễn Hồng Quang ễn Đức Hậu ồng Quang
Trang 2Ph n I Gi i thi u v Interoperating with Legacy Code ần I Giới thiệu về Interoperating with Legacy Code ới thiệu về Interoperating with Legacy Code ệu về Interoperating with Legacy Code ề Interoperating with Legacy Code
Nh m t sáng t o hoàn toàn m i, ngày và th i gian API trong Java ư ội, ngày ạo hoàn toàn mới, ngày và thời gian API trong Java ớp: CNTT1.02 – K57 ời gian API trong Java
s ph i tẽ phải tương thích với các lớp hiện có, chẳng hạn như ải tương thích với các lớp hiện có, chẳng hạn như ương thích với các lớp hiện có, chẳng hạn như ng thích v i các l p hi n có, ch ng h n nh ớp: CNTT1.02 – K57 ớp: CNTT1.02 – K57 ện có, chẳng hạn như ẳng hạn như ạo hoàn toàn mới, ngày và thời gian API trong Java ư
java.util.Date, java.util.GregorianCalender, và
java.sql.Date/Time/Timestamp
L p Th i gian hi n t i(Instant) là ớp: CNTT1.02 – K57 ời gian API trong Java ện có, chẳng hạn như ạo hoàn toàn mới, ngày và thời gian API trong Java g n ần tương thích với các lớp hiện có, chẳng hạn như ng t nh l p ự như lớp ư ớp: CNTT1.02 – K57
java.util.Date Trong Java 8, l p này có hai phớp: CNTT1.02 – K57 ương thích với các lớp hiện có, chẳng hạn như ng th c b sung: ức Hậu ổ sung:
phương thích với các lớp hiện có, chẳng hạn như ng th c toInstant có th chuy n đ i m t ngàyức Hậu ể chuyển đổi một ngày ể chuyển đổi một ngày ổ sung: ội, ngày (Date) sang th i ời gian API trong Java gian hi n t iện có, chẳng hạn như ạo hoàn toàn mới, ngày và thời gian API trong Java (Instant), và gi nguyên phữ nguyên phương thức có thể chuyển ương thích với các lớp hiện có, chẳng hạn như ng th c có th chuy n ức Hậu ể chuyển đổi một ngày ể chuyển đổi một ngày
đ i theo hổ sung: ướp: CNTT1.02 – K57ng khác
Ví d :Instant & Dateụ :Instant & Date Date date = Date.from(instant); // API -> legacy Instant instant = date.toInstant(); // legacy -> new API
Date.from (Instant) : tạo ra một đối tượng ngày(Date) từ một thời gian hiện tại(Instant)
Date.toInstant() : chuyển đổi một đối tượng ngày(Date) sang một thời gian hiện tại (Instant)
Trang 3java.util.GregorianCalendar, và l p này cũng có các phớp: CNTT1.02 – K57 ương thích với các lớp hiện có, chẳng hạn như ng th c ức Hậu
có th chuy n đ i trong Java 8 Phể chuyển đổi một ngày ể chuyển đổi một ngày ổ sung: ương thích với các lớp hiện có, chẳng hạn như ng th c chuy n đ i ức Hậu ể chuyển đổi một ngày ổ sung:
toZonedDateTime t GregorianCalendar sang ZonedDateTime, và ừ GregorianCalendar sang ZonedDateTime, và có
th ể chuyển đổi một ngày chuy n đ i ngể chuyển đổi một ngày ổ sung: ược lại ạo hoàn toàn mới, ngày và thời gian API trong Java c l i
Ví d : ụ :Instant & Date ZonedDateTime & GregorianCalendar GregorianCalendar gc = GregorianCalendar.from(zdt) ; ZonedDateTime zdt = cal.toZonedDateTime();
GregorianCalendar.from (ZonedDateTime) : tạo ra một đối tượng GregorianCalendar bằng cách sử dụng ngôn ngữ mặc định từ một ZonedDateTime
cal.toZonedDateTime () : chuyển đổi một GregorianCalendar sang một ZonedDateTime
M t b chuy n đ i có s n cho các l p ngày và th i gian trong gói ội, ngày ội, ngày ể chuyển đổi một ngày ổ sung: ẵn cho các lớp ngày và thời gian trong gói ớp: CNTT1.02 – K57 ời gian API trong Java java.sql B n cũng có th s d ng m t DateTimeFormatter t mã ạo hoàn toàn mới, ngày và thời gian API trong Java ể chuyển đổi một ngày ử dụng một DateTimeFormatter từ mã ụ :Instant & Date ội, ngày ừ GregorianCalendar sang ZonedDateTime, và
k th a đ s d ng java.text.Format.ế thừa để sử dụng java.text.Format ừ GregorianCalendar sang ZonedDateTime, và ể chuyển đổi một ngày ử dụng một DateTimeFormatter từ mã ụ :Instant & Date
Ví dụ :Instant & Date Date today = new Date();
System.out.println("Today is : " + today);
SimpleDateFormat("dd-MM-yyyy");
System.out.println("Today in dd-MM-yyyy format : " + date);
Trang 4 B ng chuy n đ i gi a các l p java.time và l p k th a ải tương thích với các lớp hiện có, chẳng hạn như ể chuyển đổi một ngày ổ sung: ữ nguyên phương thức có thể chuyển ớp: CNTT1.02 – K57 ớp: CNTT1.02 – K57 ế thừa để sử dụng java.text.Format ừ GregorianCalendar sang ZonedDateTime, và
L pớp: CNTT1.02 – K57 Các phương thích với các lớp hiện có, chẳng hạn như ng th c chuy n đ iức Hậu ể chuyển đổi một ngày ổ sung:
Date & Instant
+ Date.from(instant): t o ra m tạo hoàn toàn mới, ngày và thời gian API trong Java ội, ngày đ i tối tượng ược lạing ngày(Date) t m từ GregorianCalendar sang ZonedDateTime, và ội, ngày th i gian hi n t i(Instant).ời gian API trong Java ện có, chẳng hạn như ạo hoàn toàn mới, ngày và thời gian API trong Java + date.toInstant(): chuy n đ i m tể chuyển đổi một ngày ổ sung: ội, ngày đ i tối tượng ược lạing ngày(Date) sang m tội, ngày th i gian hi n t i (Instant).ời gian API trong Java ện có, chẳng hạn như ạo hoàn toàn mới, ngày và thời gian API trong Java
ZonedDatetime &
GregorianCalendar
+ GregorianCalendar.from (zonedDateTime) : tạo ra một đối tượng GregorianCalendar từ một ZonedDateTime
+ cal.toZonedDateTime () : chuyển đổi một GregorianCalendar sang một ZonedDateTime
Instant &
TimeStamp
+ TimeStamp.from(instant) : t o ra m t đ i tạo hoàn toàn mới, ngày và thời gian API trong Java ội, ngày ối tượng ược lạing nhãn th i gian(TimeStamp) t th i gian hi n ời gian API trong Java ừ GregorianCalendar sang ZonedDateTime, và ời gian API trong Java ện có, chẳng hạn như
t i(Instant).ạo hoàn toàn mới, ngày và thời gian API trong Java + timestamp.toInstant() : chuy n đ i t m t nhãn ể chuyển đổi một ngày ổ sung: ừ GregorianCalendar sang ZonedDateTime, và ội, ngày
th i gian(TimeStamp) sang th i gian hi n ời gian API trong Java ời gian API trong Java ện có, chẳng hạn như
t i(Instant).ạo hoàn toàn mới, ngày và thời gian API trong Java
LocalDateTime &
TimeStamp
+Timestamp.valueOf(localDateTime) :t o ra ạo hoàn toàn mới, ngày và thời gian API trong Java java.sql.TimeStamp t LocalDateTime.ừ GregorianCalendar sang ZonedDateTime, và
+ timestamp.toLocalDateTime() : chuy n đ i t ể chuyển đổi một ngày ổ sung: ừ GregorianCalendar sang ZonedDateTime, và TimeStamp sang LocalDateTime
LocalDate & Date + Date.valueOf(localDate) : t o java.sql.Date t LocalDate ạo hoàn toàn mới, ngày và thời gian API trong Java ừ GregorianCalendar sang ZonedDateTime, và
+ date.toLocalDate() : chuy n đ i t Date sang ể chuyển đổi một ngày ổ sung: ừ GregorianCalendar sang ZonedDateTime, và LocalDate
LocalTime & Time + Time.valueOf(localTime) : t o java.sql.Time t LocalTime ạo hoàn toàn mới, ngày và thời gian API trong Java ừ GregorianCalendar sang ZonedDateTime, và
+ time.toLocalTime() : chuy n đ i t Time sang ể chuyển đổi một ngày ổ sung: ừ GregorianCalendar sang ZonedDateTime, và LocalTime
DateTimeFormatte
r & DateFormat
+ Formatter.toFormat() : chuy n đ i t ể chuyển đổi một ngày ổ sung: ừ GregorianCalendar sang ZonedDateTime, và DateTimeFormatter sang DateFormat
TimeZone & +TimeZone.getTimeZone(id) : t o TimeZone t ZoneId ạo hoàn toàn mới, ngày và thời gian API trong Java ừ GregorianCalendar sang ZonedDateTime, và
Trang 5FileTime & Instant + fileTime.toInstant() : chuy n đ i t FileTime sang ể chuyển đổi một ngày ổ sung: ừ GregorianCalendar sang ZonedDateTime, và
Instant
Ví dụ: Instant & TimeStamp TimeStamp timeStamp = TimeStamp.from(instant); // API -> legacy Instant instant = time.toInstant(); // legacy -> new API
Ví dụ : LocalDate & Date Date date = Date.valueOf(localDate); // API -> legacy LocalDate localDate = date.toLocalDate(); // legacy -> new API
Ví dụ : LocalDateTime & TimeStamp TimeStamp timeStamp = TimeStamp.valueOf(ldt);
LocalDateTime ldt = timeStamp.toLocalDateTime();
Ví dụ : LocalTime & Time Time time = Time.valueOf(localTime); // API -> legacy LocalTime localTime = time.toLocalTime(); // legacy -> new API
Ví dụ : TimeZone & ZoneId TimeZone timeZone = TimeZone.getTimeZone(zoneId);
ZoneId zoneId = timeZoned.toZoneId();
Ví dụ : FileTime & Instant FileTime fileTime = FileTime.from(instant);
Instant instant = fileTime.toInstant();
Trang 6 M t s ví d c thội, ngày ối tượng ụ :Instant & Date ụ :Instant & Date ể chuyển đổi một ngày
Ví d 1:ụ :Instant & Date chuy n đ i gi a Date & Instantể chuyển đổi một ngày ổ sung: ữ nguyên phương thức có thể chuyển
public class Main { public static void main(String[] args) {
System.out.println("Date: " + dt);
Instant in = dt.toInstant();
System.out.println("Instant: " + in);
Date dt2 = Date.from(in);
System.out.println("Date: " + dt2);
} }
K t quế thừa để sử dụng java.text.Format ải tương thích với các lớp hiện có, chẳng hạn như
Date: Mon Sep 21 20:09:49 ICT 2015 Instant: 2015-09-21T13:09:49.937Z Date: Mon Sep 21 20:09:49 ICT 2015
Trang 7Ví d 2: ụ :Instant & Date
public class Main {
public static void main(String[] args) {
LocalDate ld = gc.toZonedDateTime().toLocalDate();
System.out.println("Local Date: " + ld);
LocalTime lt = gc.toZonedDateTime().toLocalTime();
System.out.println("Local Time: " + lt);
LocalDateTime ldt = gc.toZonedDateTime().toLocalDateTime();
System.out.println("Local DateTime: " + ldt);
OffsetDateTime od = gc.toZonedDateTime().toOffsetDateTime();
System.out.println("Offset Date: " + od);
OffsetTime ot = gc.toZonedDateTime().toOffsetDateTime().toOffsetTime(); System.out.println("Offset Time: " + ot);
ZonedDateTime zdt = gc.toZonedDateTime();
System.out.println("Zoned DateTime: " + zdt);
ZoneId zoneId = zdt.getZone();
TimeZone timeZone = TimeZone.getTimeZone(zoneId);
System.out.println("Zone ID: " + zoneId);
System.out.println("Time Zone ID: " + timeZone.getID());
GregorianCalendar gc2 = GregorianCalendar.from(zdt);
}
}
Kết quả :
Local Date: 2014-03-11
Local Time: 15:45:50
Local DateTime: 2014-03-11T15:45:50
Offset Date: 2014-03-11T15:45:50+07:00
Offset Time: 15:45:50+07:00
Trang 8Time Zone ID: Asia/Bangkok
Gregorian Calendar: Tue Mar 11 15:45:50 ICT 2014
Ph n II Câu h i tr c nghi m ần I Giới thiệu về Interoperating with Legacy Code ỏi trắc nghiệm ắc nghiệm ệu về Interoperating with Legacy Code
1) Câu 1:Ph ương thích với các lớp hiện có, chẳng hạn như ng th c nào dùng đ chuy n đ i gi a 2 l p ức Hậu ể chuyển đổi một ngày ể chuyển đổi một ngày ổ sung: ữ nguyên phương thức có thể chuyển ớp: CNTT1.02 – K57
java.util.Date và java.time.Instant?
A Date.from(instant)
B Instant.toDate();
C date.getInstant();
D date.toLocalTime();
Đáp án A
2) Câu 2: K t qu đo n code sau là : ế thừa để sử dụng java.text.Format ải tương thích với các lớp hiện có, chẳng hạn như ạo hoàn toàn mới, ngày và thời gian API trong Java
DateTimeFormatter f = DateTimeFormatter.ofPattern("MMMM
dd, yyyy, hh:mm:ss");
System.out.println(dateTime.format(f));
B January 20, 2020, 11:12:34
C January 20, 20, 11:12:34
D Jan 20, 20, 11:12:34
Đáp án B
3) Câu 3: Ph ương thích với các lớp hiện có, chẳng hạn như ng th c nào dùng đ chuy n đ i gi a 2 l p ức Hậu ể chuyển đổi một ngày ể chuyển đổi một ngày ổ sung: ữ nguyên phương thức có thể chuyển ớp: CNTT1.02 – K57
A Instant.fromZonedDateTime();
B date.toZonedDateTime();
C zdt.toLocalTime();