2013-11-27 107 views
8

我有一個這樣的字符串2013-10-22T01:37:56。我需要將此字符串更改爲UTC日期格式,如下所示MM/dd/yyyy KK:mm:ss a。我嘗試了一些代碼,但它沒有返回UTC日期時間。UTC格式的日期Java

我的代碼是

 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()); 
     } 

我得到的輸出是MM/dd/yyyy KK:mm:ss a格式。但不是UTC時間格式。 如何解決這個問題?

+0

它返回什麼? – Buddha

+1

而不是打印dateObj,也許你應該打印一個RevisedDate? – Julien

+4

UTC不是一個特定的日期格式,但像一個時區。 – Henry

回答

9

嘗試與Zz時區標誌格式化日期:

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

嘗試......爲我工作和印刷10/22/2013 01:37:56 AM Ofcourse,這是你的代碼只有很少的修改。

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」)); - 這正是我正在尋找的 –

+1

這個例子很混亂。 「sdf.setTimeZone(...)」在「sdf.parse(...)」之後。 「format(dateObj)」使用一個新的SimpleDateFormat。所以「setTimeZone」對這裏的任何東西都沒有影響。這是正確的提示。 – 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 zone。什麼時區暗示輸入字符串?你想輸出什麼時區?並且,UTC是一個時區(或根據您的心態缺乏)非字符串格式

ISO 8601

你輸入的字符串是ISO 8601格式,但它缺乏一個offset from UTC

喬達時間

這裏是Joda-Time 2.3一些示例代碼,向您展示如何處理時區。 Joda-Time內置了默認formatters,用於解析和生成日期 - 時間值的字符串表示。

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(); 

至於生成其他格式的字符串表示法,請在StackOverflow中搜索「Joda格式」。