2011-07-18 57 views
5

Tôi khá mới đối với Java và tôi hơi bị kẹt với việc sử dụng SimpleDateFormatCalendar. Tôi có một Date-Object và muốn trích xuất một datestring GMT như yyyy-MM-dd HH:mm:ss. Tôi sống ở Đức và hiện tại chúng tôi là GMT +0200. Thời gian Date-Object của tôi là ví dụ 2011-07-18 13:00:00. Những gì tôi cần bây giờ là 2011-07-18 11:00:00. Mức chênh lệch cho múi giờ của tôi sẽ được tính toán tự động.Chuyển đổi GMT DateTime Chuỗi

tôi đã cố gắng một cái gì đó như thế này, nhưng tôi đoán có một lỗi ở đâu đó:

private String toGmtString(Date date){ 
    SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    TimeZone timeZone = TimeZone.getDefault(); 
    Calendar cal = Calendar.getInstance(new SimpleTimeZone(timeZone.getOffset(date.getTime()), "GMT")); 
    sd.setCalendar(cal); 
    return sd.format(date); 
} 

Trên một số thiết bị các datestring được trả về như tôi muốn nó. Trên các thiết bị khác, bù trừ không được tính đúng và tôi nhận được ngày và giờ từ ngày-đối tượng đầu vào. Bạn có thể cho tôi một số lời khuyên hay lời khuyên không? Tôi đoán cách thoát khỏi múi giờ mặc định của tôi không hoạt động?

Trả lời

5
private String toGmtString(Date date){ 
    SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    sd.setTimeZone(TimeZone.getTimeZone("GMT")); 
    return sd.format(date); 
} 

Bạn không cần phải tạo ra một mới SimpleTimeZone, bởi vì bạn không phải phát minh ra một múi giờ mới - có 2 múi giờ hiện có mà đi vào chơi trong chương trình của bạn, và giờ mặc định của bạn một.

Bạn cũng không cần sửa đổi đối tượng ngày hiện tại của mình, vì bạn không muốn đại diện cho một thời điểm khác - bạn chỉ muốn một cách khác để hiển thị cùng một thời điểm.

Tất cả những gì bạn cần làm là thông báo cho SimpleDateFormat múi giờ để sử dụng trong định dạng.

+0

Tôi không thể tin rằng nó là dễ dàng, nhưng tất nhiên tôi sẽ cố gắng đó quá. Hãy cho tôi một vài phút xin vui lòng ... – Marco

+0

Ok .. Thử nghiệm .. Tôi đã sử dụng một đối tượng ngày đại diện cho '2011-07-18 13: 34: 27'. Sử dụng hàm ngày mặc định '.toGMTString()' Tôi nhận được '18 Jul 2011 11:43:27 GMT' là thời điểm chính xác mà tôi cần. Sử dụng chức năng của riêng tôi, tôi vẫn nhận được' 2011-07-18 13: 43: 27' đó là vấn đề của tôi. Sử dụng chức năng của Jigar Joshin tôi nhận được '2011-07-18 12: 43: 27' mất tích 1 giờ (mùa hè châu Âu). Sử dụng chức năng Eli Acherkans tôi nhận được '2011-07-18 11: 43: 27' chính xác là những gì tôi muốn (Bù đắp bao gồm cả mùa hè châu Âu). – Marco

+0

+1

2
private String toGmtString(Date date){ 
    //date formatter 
    SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    //getting default timeZone 
    TimeZone timeZone = TimeZone.getDefault(); 
    //getting current time 
    Calendar cal = Calendar.getInstance() 
    cal.setTime(date) ; 
    //adding/substracting curren't timezone's offset 
    cal.add(Calendar.MILLISECOND, -1 * timeZone.getRawOffset());  
    //formatting and returning string of date 
    return sd.format(cal.getTime()); 
} 
+0

Ok điều này có vẻ tốt. Tôi sẽ thử một vài phút. Một câu hỏi. Bạn đã sử dụng thông số ngày tháng từ cuộc gọi hàm ở đâu và như thế nào? Tôi có nên sử dụng 'cal.setTime (ngày);' sau khi nhận được cá thể không? – Marco

+0

có chính xác. cập nhật nó. –

+0

Tuyệt vời! Công trinh! Cảm ơn nhiều! – Marco

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