2013-11-27 14 views
8

Tôi có một chuỗi như thế này 2013-10-22T01:37:56. Tôi cần phải thay đổi chuỗi này thành định dạng ngày UTC như thế này MM/dd/yyyy KK:mm:ss a. Tôi đã thử một số mã nhưng nó không trả lại datetime UTC.Ngày theo định dạng UTC Java

Mã của tôi là

 String[] time = itsAlarmDttm.split("T"); 
     String aFormatDate = time[0]+ " "+time[1]; 
     String aRevisedDate = null; 
     try { 
      final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
      final Date dateObj = sdf.parse(aFormatDate); 
      aRevisedDate = new SimpleDateFormat("MM/dd/yyyy KK:mm:ss a").format(dateObj); 
      System.out.println(aRevisedDate); 
     } catch (ParseException e) { 
      itsLogger.error("Error occured in Parsing the Data Time Object: " +e.getMessage()); 
     } catch (Exception e) { 
      itsLogger.error("Error occured in Data Time Objecct: " +e.getMessage()); 
     } 

Tôi nhận được đầu ra là MM/dd/yyyy KK:mm:ss a định dạng. Nhưng Không phải định dạng thời gian UTC. Cách giải quyết vấn đề này?

+0

thư trả lại là gì? – Buddha

+1

Thay vì in ngàyObj có lẽ bạn nên in aRevisedDate? – Julien

+4

UTC không phải là một định dạng ngày cụ thể nhưng giống như một múi giờ. – Henry

Trả lời

9

Hãy thử để định dạng ngày của bạn với Z hoặc z cờ múi giờ:

new SimpleDateFormat("MM/dd/yyyy KK:mm:ss a Z").format(dateObj); 
15

Hãy thử này ... Làm việc cho tôi và in 10/22/2013 01:37:56 AM Ofcourse đây là mã của bạn chỉ với những thay đổi nhỏ.

final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); // This line converts the given date into UTC time zone 
final java.util.Date dateObj = sdf.parse("2013-10-22T01:37:56"); 

aRevisedDate = new SimpleDateFormat("MM/dd/yyyy KK:mm:ss a").format(dateObj); 
System.out.println(aRevisedDate); 
+0

sdf.setTimeZone (TimeZone.getTimeZone ("UTC")); - đây chính xác là những gì tôi đang tìm kiếm –

+1

Ví dụ là hỗn loạn. "sdf.setTimeZone (...)" xuất hiện sau "sdf.parse (...)". Và "format (dateObj)" sử dụng một SimpleDateFormat mới. Vì vậy, "setTimeZone" không có ảnh hưởng đến bất cứ điều gì ở đây. Đó là gợi ý chính xác mặc dù. – jox

2
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
// or SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy KK:mm:ss a Z"); 
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
System.out.println(sdf.format(new Date())); 
4

Time Zones gì?

Không có câu hỏi nào bạn đề cập đến time zone. Múi giờ nào ngụ ý rằng chuỗi đầu vào? Bạn muốn múi giờ nào cho sản lượng của mình? Và, UTC là múi giờ (hoặc thiếu múi giờ tùy thuộc vào suy nghĩ của bạn) không phải là định dạng chuỗi.

ISO 8601

chuỗi đầu vào của bạn là ở định dạng ISO 8601, ngoại trừ việc nó thiếu một offset from UTC.

Joda thời gian

Dưới đây là một số mã ví dụ trong Joda-Time 2.3 để cho bạn thấy làm thế nào để xử lý các múi giờ. Joda-Time đã tích hợp sẵn mặc định formatters để phân tích cú pháp và tạo chuỗi biểu diễn các giá trị ngày-thời gian.

String input = "2013-10-22T01:37:56"; 
DateTime dateTimeUtc = new DateTime(input, DateTimeZone.UTC); 
DateTime dateTimeMontréal = dateTimeUtc.withZone(DateTimeZone.forID("America/Montreal"); 
String output = dateTimeMontréal.toString(); 

Để tạo biểu diễn chuỗi ở định dạng khác, hãy tìm kiếm StackOverflow cho "Định dạng Joda".

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