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

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

Đang tải... (xem toàn văn)

Thông tin tài liệu

... Duration timeElapsed2 = Duration.between(start2, end2); boolean overTenTimesFaster = timeElapsed.multipliedBy(10).minus(timeElapsed2).isNegative(); // Or timeElapsed.toNanos() * 10 < timeElapsed2.toNanos()...Hà Nội, 9/2015 Chương The new date and time api 5.1 The time line Trong lịch sử, đơn vị thời gian có nguồn gốc từ vòng quay trái đất quanh... máy tính phải thực việc đồng thời gian chúng với dịch vụ thời gian thực API Date and Time Java đòi hỏi đặc tả Java phải sử dụng quy mô thời gian : + Phải có 86400s ngày + Trùng khớp với thời điểm

ĐẠ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

Ngày đăng: 29/09/2015, 08:24

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan