Tải bản đầy đủ (.docx) (8 trang)

Báo cáo lập trình java về Interoperating with Legacy Code

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (162.69 KB, 8 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
----------------------------

BÁO CÁO MÔN HỌC
LẬP TRÌNH JAVA – IT4784
5.7 Interoperating with Legacy Code

Sinh viên: Nguyễn Đức Hậu
MSSV: 20124977
Lớp: CNTT1.02 – K57
GV hướng dẫn: TS. Nguyễn Hồng Quang

Hà Nội, ngày 20 tháng 9 năm 2015


Lập trình Java – IT4784

Phần I. Giới thiệu về 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
sẽ phải tương thích với các lớp hiện có, chẳng hạn như
java.util.Date, java.util.GregorianCalender, và
java.sql.Date/Time/Timestamp.



Lớp Thời gian hiện tại(Instant) là gần tương tự như lớp
java.util.Date. Trong Java 8, lớp này có hai phương thức bổ sung:
phương thức toInstant có thể chuyển đổi một ngày(Date) sang thời


gian hiện tại(Instant), và giữ nguyên phương thức có thể chuyển
đổi theo hướng khác.
Ví dụ :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).

NGUYỄN ĐỨC HẬU - 20124977

2


Lập trình Java – IT4784


Tương tự như vậy, ZonedDateTime cũng tương tự
java.util.GregorianCalendar, và lớp này cũng có các phương th ức
có thể chuyển đổi trong Java 8. Phương thức chuyển đổi
toZonedDateTime từ GregorianCalendar sang ZonedDateTime, và có
thể chuyển đổi ngược lại
Ví dụ: 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
java.sql. Bạn cũng có thể sử dụng một DateTimeFormatter t ừ mã
kế thừa để sử dụng java.text.Format.
Ví dụ
Date today = new Date();
System.out.println("Today is : " + today);
//formatting date in Java using SimpleDateFormat
SimpleDateFormat DATE_FORMAT = new
SimpleDateFormat("dd-MM-yyyy");
String date = DATE_FORMAT.format(today);
System.out.println("Today in dd-MM-yyyy format : " + date);

NGUYỄN ĐỨC HẬU - 20124977

3


Lập trình Java – IT4784




Bảng chuyển đổi giữa các lớp java.time và lớp kế thừa
Lớp

Date & Instant

ZonedDatetime &
GregorianCalendar

Các phương thức chuyển đổi
+ 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).
+ 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.

+ TimeStamp.from(instant) : tạo ra một đối tượng
Instant &
nhãn thời gian(TimeStamp) từ thời gian hiện
TimeStamp
tại(Instant).
+ timestamp.toInstant() : chuyển đổi từ một nhãn
thời gian(TimeStamp) sang thời gian hiện
tại(Instant).
+Timestamp.valueOf(localDateTime) :tạo ra

LocalDateTime & java.sql.TimeStamp từ LocalDateTime.
TimeStamp
+ timestamp.toLocalDateTime() : chuyển đổi từ
TimeStamp sang LocalDateTime
+ Date.valueOf(localDate) : tạo java.sql.Date từ
LocalDate & Date LocalDate
+ date.toLocalDate() : chuyển đổi từ Date sang
LocalDate
+ Time.valueOf(localTime) : tạo java.sql.Time từ
LocalTime & Time LocalTime
+ time.toLocalTime() : chuyển đổi từ Time sang
LocalTime
+ Formatter.toFormat() : chuyển đổi từ
DateTimeFormatte DateTimeFormatter sang DateFormat
r & DateFormat
TimeZone &
ZoneId

+TimeZone.getTimeZone(id) : tạo TimeZone từ
ZoneId
+ timeZone.toZoneId() :chuyển đổi một đối tượng
TimeZone sang một đối tượng ZoneId

NGUYỄN ĐỨC HẬU - 20124977

4


Lập trình Java – IT4784
FileTime & Instant




+ FileTime.from(instant) : tạo FileTime từ Instant
+ fileTime.toInstant() : chuyển đổi từ FileTime sang
Instant

Một số ví dụ về chuyển đổi
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();

NGUYỄN ĐỨC HẬU - 20124977

5


Lập trình Java – IT4784



Một số ví dụ cụ thể
Ví dụ 1:chuyển đổi giữa Date & Instant
public class Main {
public static void main(String[] args) {
Date dt = new Date();
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ả
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

NGUYỄN ĐỨC HẬU - 20124977

6


Lập trình Java – IT4784

Ví dụ 2:
public class Main {
public static void main(String[] args) {
GregorianCalendar gc = new GregorianCalendar(2014, 2, 11, 15, 45, 50);
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);
System.out.println("Gregorian Calendar: " + gc2.getTime());
}
}
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
Zoned DateTime: 2014-03-11T15:45:50+07:00[Asia/Bangkok]
Zone ID: Asia/Bangkok
Time Zone ID: Asia/Bangkok
Gregorian Calendar: Tue Mar 11 15:45:50 ICT 2014

NGUYỄN ĐỨC HẬU - 20124977

7


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 nào dùng để chuyển đổi giữa 2 lớp
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à :
DateTimeFormatter f = DateTimeFormatter.ofPattern("MMMM
dd, yyyy, hh:mm:ss");
System.out.println(dateTime.format(f));
A. Jan
20, 2020 , 11:12:34
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ức nào dùng để chuyển đổi giữa 2 lớp
java.util.GregorianCalendar và lớp java.time.ZonedDateTime?
A. Instant.fromZonedDateTime();
B. date.toZonedDateTime();
C. zdt.toLocalTime();
D. cal.toZonedDateTime();
Đáp án D

NGUYỄN ĐỨC HẬU - 20124977


8



×