2013-06-21 39 views
5

Tôi đã làm điều này ví dụ Lịch của tôi để trở lại ngày trong múi giờ UTCCalendar.getTime() không trở về ngày UTC nếu TimeZone được định nghĩa

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:SS Z"); 
TimeZone tz = TimeZoneUtil.getTimeZone(StringPool.UTC); 
formatter.setTimeZone(tz); 

    Date dtStart = null; 
    Date dtEnd = null; 

    try{ 
     dtStart = formatter.parse(formatter.format(startDate.getTime())); 
     dtEnd = formatter.parse(formatter.format(endDate.getTime())); 
    }catch (Exception e) { 
     e.getStackTrace(); 
} 

Nó hoạt động tốt cho đến timestamp định dạng Tôi lịch để trả về một chuỗi ngày với múi giờ bắt buộc nhưng khi tôi phân tích cú pháp ngày chuỗi đó thành Ngày tháng, nó lại chọn múi giờ địa phương? Tôi cần lưu trữ đối tượng Ngày trong múi giờ UTC.

Mọi trợ giúp sẽ được đánh giá cao!

+0

bản sao có thể có của [Làm cách nào để có được ngày và giờ hiện tại trong UTC hoặc GMT bằng Java?] (Http://stackoverflow.com/questions/308683/how-can-i-get-the-current-date -and-time-in-utc-or-gmt-in-java) –

Trả lời

7

Bạn có thể sử dụng này:

Date localTime = new Date(); 

//creating DateFormat for converting time from local timezone to GMT 
DateFormat converter = new SimpleDateFormat("dd/MM/yyyy:HH:mm:ss"); 

//getting GMT timezone, you can get any timezone e.g. UTC 
converter.setTimeZone(TimeZone.getTimeZone("GMT")); 

System.out.println("local time : " + localTime);; 
System.out.println("time in GMT : " + converter.format(localTime)); 

Nó sẽ cho:
giờ địa phương: Fri 21 Tháng sáu 11:55:00 UTC 2013
thời gian trong giờ: 21/06/2013: 11:55:00

Tôi hy vọng điều đó sẽ hữu ích.

Chúc mừng.

0

Đối tượng ngày trong java sẽ luôn lưu trữ các giá trị trong thông tin múi giờ của máy chủ (hệ thống của bạn).

Đây là từ javadoc:

Mặc dù class Date là nhằm phản ánh giờ phối hợp quốc tế (UTC), nó có thể không làm như vậy một cách chính xác, tùy thuộc vào môi trường máy chủ của Java Virtual Machine.

Bạn nên thử sử dụng Joda Time có nhiều nâng cao.

+0

Điều này không đúng, hàm tạo Date() mặc định lưu trữ giá trị của [System.currentTimeMillis()] (http://docs.oracle.com/javase/7/docs/api/java/lang/Hệ thống.html # currentTimeMillis% 28% 29), là số mili giây kể từ ngày 1 tháng 1 năm 1970 UTC. Như bạn đã đề cập, có sự khác biệt nhỏ giữa "thời gian máy tính" và UTC, xem cuộc thảo luận về [giây nhảy vọt] (http://docs.oracle.com/javase/7/docs/api/java/util/Date.html) . Nhưng Joda Time không đưa ra bất kỳ lợi thế nào về khía cạnh này, xem [Các giây nhảy vọt được hỗ trợ] (http://joda-time.sourceforge.net/faq.html#leapseconds). – devconsole

-1

Lời giải thích tốt về lý do tại sao ngày đối tượng dùng giá trị múi giờ hiện tại,

vui lòng tham khảo SO answer

EDIT này.


tại đây tôi sẽ thêm một số phần quan trọng của câu trả lời đó.


java.util.Date không có múi giờ cụ thể, mặc dù giá trị của nó thường được nghĩ đến nhất liên quan đến UTC. Điều gì khiến bạn nghĩ rằng đó là giờ địa phương?

Để chính xác: giá trị trong java.util.Date là số mili giây kể từ thời đại Unix, xảy ra vào nửa đêm ngày 1 tháng 1 năm 1970, UTC. Cùng một thời đại cũng có thể được mô tả trong các múi giờ khác, nhưng mô tả truyền thống là về UTC. Vì nó là một số mili giây kể từ một kỷ nguyên cố định, giá trị trong java.util.Date giống nhau trên toàn thế giới tại bất kỳ thời điểm cụ thể nào, bất kể múi giờ địa phương.