2014-05-15 20 views
5

Tôi chỉ có chuỗi ngày và tôi muốn xem thời gian trong TimeZone khác theo chuỗi. Vì vậy, tôi đã làm điều đó như thế:Lấy thời gian của TimeZone khác theo chuỗi ngày, kết quả là sai

String dateStr = "2014-05-15 16:14:58 PM"; 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 
    sdf.setTimeZone(TimeZone.getTimeZone("America/Denver")); 
    Date date = sdf.parse(dateStr); 
    System.out.println(date); 

    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 
    System.out.println(sdf1.format(date)); 

Đây là TimeZone hiện trong máy tính của tôi:

enter image description here

Kết quả rằng mã ran là:

Fri May 16 06:14:58 CST 2014 

2014-05-16 06:14:58 AM 

Kết quả là sai, tôi đã có kết quả đúng bằng cách thay đổi TimeZone thành "America/Denver" trong máy tính của tôi và tôi thấy rằng:

America/Denver —— 2014-05-15 02:14:58 AM 

Tôi không biết tại sao nó thích điều đó?

Nhưng nếu tôi đã có một ngày không phải là một chuỗi ngày, tôi làm điều đó:

public static String getFormatedDateString(String _timeZone) { 
    TimeZone timeZone = null; 
    if (StringUtils.isEmpty(_timeZone)) { 
     timeZone = TimeZone.getDefault(); 
    } else { 
     timeZone = TimeZone.getTimeZone(_timeZone); 
    } 

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 
    sdf.setTimeZone(timeZone); 
    // TimeZone.setDefault(timeZone); 
    return sdf.format(new Date()); 
} 

System.out.println ("Châu Mỹ/Denver -" + getFormatedDateString ("Châu Mỹ/Denver"));

Kết quả thích rằng:

------Asia/Shanghai------ 
2014-05-15 16:32:04 PM (current date) 
America/Denver —— 2014-05-15 02:32:04 AM 

Kết quả này là đúng.

Vì vậy, tôi đã nhầm lẫn, tôi không thể tìm thấy vấn đề khi tôi chỉ có một chuỗi ngày và tôi muốn biết thời gian của TimeZone khác. Có thể cơ thể nào giúp tôi được không?

Trả lời

5
  1. Date đối tượng trong Java độc lập với khái niệm múi giờ.
  2. Những gì bạn muốn làm có được thời gian tương đương trong múi giờ khác của chuỗi ngày được cho là nằm trong múi giờ của riêng bạn.

Tuy nhiên, điểm thứ 2 xuất hiện ngược trong mã của bạn:

String dateStr = "2014-05-15 16:14:58 PM"; 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 
sdf.setTimeZone(TimeZone.getTimeZone("America/Denver")); 
Date date = sdf.parse(dateStr); 

gì những 4 dòng làm là xem xét chuỗi ngày như là một điểm trong thời gian trong "Mỹ/Denver" múi giờ.

Khi bạn phân tích cú pháp thành đối tượng ngày, nó sẽ cung cấp cho bạn thời gian tương đương trong múi giờ của riêng bạn.

Bạn muốn nó theo chiều ngược lại:

Do đó ở gần mã của bạn (bạn chỉ có thể sử dụng một SimpleDateFormat trường hợp duy nhất có hiệu quả, mà bạn có thể hình dung ra sau),

Thả setTimezone trên sdf đầu tiên:

String dateStr = "2014-05-15 16:14:58 PM"; 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 
//sdf.setTimeZone(TimeZone.getTimeZone("America/Denver")); 
Date date = sdf.parse(dateStr); 
System.out.println(date); 

Thêm cùng setTimezone đến sdf khác:

SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 
sdf1.setTimeZone(TimeZone.getTimeZone("America/Denver")); 
System.out.println(sdf1.format(date)); 

Bây giờ, bạn đang phân tích chuỗi ngày tháng thành ngày trong múi giờ hiện tại (JVM) của bạn.Sau đó, định dạng cùng một ngày thành Chuỗi múi giờ khác nhau.

Output tôi nhận được với mã thay đổi (múi giờ JVM của tôi là IST):

Thu May 15 16:14:58 IST 2014 // Parsed the date string in IST 
2014-05-15 04:44:58 AM // Equivalent time in Denver 
+0

Cảm ơn, PopoFibo –

+0

@DigengTianhan bạn được hoan nghênh – PopoFibo

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