2012-02-22 31 views
46

Tôi hiện đang tạo các đối tượng UTC DateTime bằng cách sử dụng thành ngữ hiệnmặc định múi giờ ngày để UTC cho DateTime Jodatime của

DateTime now = new DateTime(DateTimeZone.UTC); 

Có cách nào để mặc định vì vậy tôi có thể tạo các đối tượng DateTime UTC dựa trên bằng cách sử dụng constructor mặc định để nó là ngầm hơn?

DateTime now = new DateTime(); 

Trả lời

60

Nếu bạn chỉ muốn thiết lập múi giờ mặc định cho thời gian Joda, sử dụng DateTimeZone.setDefault.


Nếu bạn muốn thay đổi múi giờ rằng toàn JVM sử dụng sử dụng TimeZone.setDefault phương pháp. Chỉ cần chắc chắn để thiết lập nó sớm vì nó có thể được lưu trữ bởi thời gian joda .. trích dẫn từ DateTimeZone.getDefault:

Múi giờ mặc định có nguồn gốc từ thuộc tính system.timezone. Nếu đó là null hoặc không phải là một định danh hợp lệ, thì giá trị của mặc định JDK TimeZone được chuyển đổi. Nếu không thành công, UTC sẽ được sử dụng.

+8

lưu ý, điều đó sẽ ảnh hưởng đến _whole_ jvm, có thể hoặc không thể là những gì OP muốn. – jtahlborn

+4

Đã thêm cách đặt "chỉ" cho thời gian joda ('DateTimeZone.setDefault'). – dacwe

+4

Tôi muốn nhấn mạnh sự thận trọng của jtahlborn. 'TimeZone.setDefault' ảnh hưởng đến * mọi chuỗi * của * mọi ứng dụng * đang chạy trong cùng một JVM. Gọi phương thức này có thể tạo ra tất cả các loại nhầm lẫn và hành vi bất ngờ trong các lớp khác. –

15

Nếu bạn đang thực sự quan tâm đến các ký tự phụ, sau đó chỉ cần tạo ra một phương pháp helper:

public static DateTime newUTCDateTime() { 
    return new DateTime(DateTimeZone.UTC); 
} 
Các vấn đề liên quan