2010-05-23 35 views
17

Tôi muốn biết Ngày và Giờ hiện tại.Java - Cách nhận ngày hiện tại độc lập với ngày hệ thống?

Calendar.getInstance(); 

đại diện cho một ngày và thời gian của hệ thống mà chương trình đang chạy và ngày hệ thống có thể là sai lầm.

Vì vậy, có cách nào để tôi có thể nhận được ngày và giờ chính xác không phụ thuộc vào ngày và giờ của hệ thống đang chạy chương trình nào không?

+2

Ngày là một điều tương đối ... Không có điều như "ngày hiện tại chính xác", trừ khi bạn đang đề cập đến một múi giờ cụ thể. –

+0

ok .. làm cách nào để có được ngày và giờ chính xác của múi giờ cụ thể? –

+0

Bạn phải bắt đầu với ngày và giờ của hệ thống hiện tại - OK? – Mark

Trả lời

4

Nếu bạn đang ở trên internet, bạn có thể hỏi nguồn thời gian đã biết và đáng tin cậy. Nếu người chạy chương trình của bạn muốn ngăn chương trình của bạn làm điều đó (như nếu bạn đã cấp cho họ giấy phép giới hạn thời gian và họ không muốn trả thêm thời gian), họ có thể giả mạo hoặc chặn kết nối đó.

Trên một dự án tôi đã tham gia, chúng tôi đã đặt một nguồn thời gian an toàn, đáng tin cậy trong phần cứng mà không thể bị giả mạo. Nó được thiết kế để mã hóa và cấp phép, và có một thư viện Java để truy cập nó. Rất tiếc, tôi không thể nhớ tên của thiết bị.

Vì vậy, câu trả lời có thể là có, có thể là không.

0

Các phương pháp mức lập trình được phát triển để Nhận ngày và giờ từ chính hệ thống của bạn. Bạn không thể sửa đổi chúng để có được ngày tháng ngoại trừ hệ thống được chỉ định.

Đối với yêu cầu bổ sung của bạn, nếu bạn muốn thực sự có nó, bạn sẽ yêu cầu Đồng bộ hóa giữa Máy khách và Máy chủ của bạn.

7

Tôi không hiểu câu hỏi của bạn hoàn toàn nhưng tôi có thể trả lời các câu tiêu đề của bạn:

GregorianCalendar gc = new GregorianCalendar(System.getCurrentTimeMillis()); 
int year = gc.get(Calendar.YEAR); 
39

Trong các phiên bản của Java trước 1.1 đó là tiêu chuẩn để sử dụng lớp Date:

Date now = new Date();  // Gets the current date and time 
int year = now.getYear(); // Returns the # of years since 1900 

Tuy nhiên , trong các phiên bản Java mới hơn, phần lớn lớp học Date đã không còn được dùng nữa (cụ thể là phương thức getYear). Nó bây giờ đã hơn tiêu chuẩn để sử dụng lớp Calendar:

Calendar now = Calendar.getInstance(); // Gets the current date and time 
int year = now.get(Calendar.YEAR);  // The current year 
+4

Wow, 29 upvotes và nó không trả lời câu hỏi, mà cụ thể hỏi làm thế nào để có được ngày thực khi đồng hồ hệ thống là sai. –

+0

@Paul Tomblin Tiêu đề ban đầu của câu hỏi này là "Java - Cách nhận năm hiện tại?" không khớp với câu hỏi thực tế. Sửa đổi điều đó. – ltlBeBoy

+0

@ltlBeBoy Tôi đoán nó quá nhiều để mong đợi người trả lời câu hỏi và upvoters để đọc nhiều hơn tiêu đề. –

0

Dưới đây là một số mã để lấy ngày ở định dạng HTTP (thường là múi giờ UTC) từ một máy chủ web của bạn đã chọn.

Tất nhiên, nếu bạn không có quyền kiểm soát phần cứng và hệ điều hành, không có gì có thể đảm bảo bạn sẽ có thể nói chuyện với máy chủ web thực mà bạn yêu cầu ... nhưng dù sao đi nữa.

package some.package; 

import java.io.IOException; 
import java.net.URL; 
import java.net.URLConnection; 
import java.util.List; 
import java.util.Map; 

public class Test { 

    private static String getServerHttpDate(String serverUrl) throws IOException { 
    URL url = new URL(serverUrl); 
    URLConnection connection = url.openConnection(); 

    Map<String, List<String>> httpHeaders = connection.getHeaderFields(); 

    for (Map.Entry<String, List<String>> entry : httpHeaders.entrySet()) { 
     String headerName = entry.getKey(); 
     if (headerName != null && headerName.equalsIgnoreCase("date")) { 
     return entry.getValue().get(0); 
     } 
    } 
    return null; 
    } 

    public static void main(String[] args) throws IOException { 
    String serverUrl = args.length > 0 ? args[0] : "https://google.com"; 
    System.out.println(getServerHttpDate(serverUrl)); 
    } 

} 
Các vấn đề liên quan