Tải bản đầy đủ (.doc) (4 trang)

Báo cáo lập trình java về The Time Line

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 (280.7 KB, 4 trang )

ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG
--------˜ ª ™ --------

BÁO CÁO BÀI TẬP LỚN
Lập trình Java IT4784
THE TIME LINE

Giảng viên hướng dẫn:

TS. Nguyễn Hồng Quang

Sinh viên thực hiện:

Trần Thị Hoa

MSSV:

20111635


Hà Nội, 9/2015

Chương 5. The new date and time api
5.1 The time line
Trong lịch sử, các đơn vị thời gian cơ bản có nguồn gốc từ vòng quay của trái đất
quanh trục của nó. Có 24 giờ hoặc 24 × 60 × 60 = 86.400 giây trong một sự xoay
vòng kín, do đó, nó có vẻ như chỉ là một câu hỏi của các phép đo thiên văn để xác
định chính xác một giây. Thật không may, trái đất rung động nhẹ, và một định
nghĩa chính xác hơn là cần thiết. Năm 1967, một định nghĩa chính xác mới về một
giây, phù hợp với định nghĩa lịch sử, có nguồn gốc từ một tài sản nội tại của


nguyên tử caesium 133. Kể từ đó, một mạng lưới chu kỳ nguyên tử đã giúp xác
định chính xác thời gian.
Thường trước đây, thời gian chính thức tuân thủ việc đồng bộ thời gian tuyệt đối
với sự quay của trái đất. Đầu tiên thời gian chính thức được hiệu chỉnh sơ qua,
nhưng bắt đầu từ năm 1972 “leap seconds” – bước nhảy của giây – thỉnh thoảng
được thêm vào . Theo học thuyết, một giây có thể dịch chuyển được trong một
khoảng thời gian, nhưng không có sự việc nào xảy ra. Người ta nói về sự thay đổi
của hệ thống một lần nữa. Một cách rõ ràng, “leap seconds” là một khó nhọc và
một số hệ thống máy tính thay thế việc sử dụng “smoothing” – làm trơn – để làm
thời gian nhân tạo chậm lại hoặc nhanh hơn leap seconds sao cho có 86400s trong
một ngày. Có việc này là bởi vì thời gian cục bộ trên các máy tính là không giống
nhau. Và tất cả các máy tính sẽ phải thực hiện việc đồng bộ thời gian của chúng
với dịch vụ thời gian thực.
API Date and Time trong Java đòi hỏi đặc tả trong Java phải sử dụng một quy mô
thời gian :
+ Phải có 86400s trong một ngày.
+ Trùng khớp với thời điểm chính thức vào buổi trưa mỗi ngày.
+Chặt chẽ phù hợp với nó ở nơi khác, trong một cách thức xác định chính xác.
2


Điều đó giúp cho Java có sự linh hoạt để thích nghi với những thay đổi trong tương
lai trong thời gian chính thức.
Trong java Instant đại diện cho một điểm trong dòng thời gian. Trước kia nó được
gọi là epoch, được tự đặt ra vào lúc nửa đêm ngày 1 tháng 1 năm 1970 tại kinh
tuyến gốc đi qua đài thiên văn Greenwich Royal ở Luân Đôn. Giống như trong hội
nghị Unix / POSIX về thời gian. Bắt đầu từ nguồn gốc đó, thời gian được đo trong
86.400 giây mỗi ngày, tới lui, trong nano giây chính xác. Các giá Instant thì có thể
trở lại một tỷ năm về trước (Instant.MIN). Đó không phải là khá đủ để thể hiện độ
tuổi của vũ trụ (khoảng 13,5 tỷ năm), nhưng nó là đủ cho tất cả các mục đích thực

tế. Sau khi tất cả, một tỷ năm trước, trái đất được bao phủ bởi băng và nơi cư trú
của tổ tiên của thực vật và động vật ngày nay. Giá trị lớn nhất, Instant.MAX, là 31
tháng 12 của năm 1000000000. Gọi phương thức Instant.now () cung cấp thời gian
hiện tại. Ta có thể so sánh hai instant bằng equal hoặc compareTo theo cách thông
thường, vì vậy bạn có thể sử dụng instant như là mốc thời gian. Để tìm ra khoảng
cách giữa hai instant, sử dụng phương thức Duration.between. Ví dụ, ở đây là làm
thế nào có thể đo thời gian chạy của thuật toán:
Instant start = Instant.now();
runAlgorithm();
Instant end = Instant.now();
Duration timeElapsed = Duration.between(start, end);
long millis = timeElapsed.toMillis();
Một Duration là khoảng thời gian giữa hai instants. Ta có thể lấy length của một
Duration trong các đơn vị thông thường bằng cách gọi toNanos, toMillis,
toSeconds, để Minutes, toHours hoặc toDays.
Durations đòi hỏi nhiều hơn một giá trị long cho việc lưu trữ nội bộ của họ. Con số
giây được lưu trữ trong một long, và số lượng nano giây trong trong 1 additionals
int.
Nếu bạn muốn thực hiện các tính toán về độ chính xác nano giây, và bạn thực sự
cần phải biết toàn bộ phạm vi của một Duration, sau đó bạn có thể sử dụng một
trong các phương pháp trong Bảng 5-1. Nếu không, bạn chỉ có thể gọi toNanos và
làm các phép tính của bạn với giá trị lâu dài.
3


Method

Miêu tả

plus, minus


Thêm hoặc trừ 1 duration từ Instant
hoặc Duration .

plusNanos, plusMillis, plusSeconds,
plusMinutes, plusHours, plusDays

Thêm một đơn vị thời gian nhất định
vào Instant hoặc Duration

minusNanos, minusMillis,
minusSeconds, minusMinutes,
minusHours, minusDays

Trừ một đơn vị thời gian vào Instant
hoặc Duration.

multipliedBy, dividedBy, negated

Trả về một Duration thu được bằng cách
nhân hoặc chia Duration này bằng một
giá trị kiểu long, hoặc bằng -1. Lưu ý
rằng bạn chỉ có thể mở rộng Durations,
Instants thì không.

isZero, isNegative

Kiểm tra Duration có phải là số không
hay số âm


Ví dụ, nếu muốn kiểm tra xem một thuật toán nhanh hơn ít nhất mười lần thuật
toán khác, ta có thể tính:
Duration timeElapsed2 = Duration.between(start2, end2);
boolean overTenTimesFaster =
timeElapsed.multipliedBy(10).minus(timeElapsed2).isNegative();
// Or timeElapsed.toNanos() * 10 < timeElapsed2.toNanos()
Chú ý: Các lớp Instant và Duration là không thay đổi, và tất cả các phương thức
như multipedBy hoặc minus, trả về một instance mới

4



×