2013-11-27 21 views
8

私はこのような文字列を持っています2013-10-22T01:37:56。私はこの文字列をこのようなUTCの日付形式に変更する必要がありますMM/dd/yyyy KK:mm:ss a。いくつかのコードを試しましたが、UTCのdatetimeは返されません。私は出力がMM/dd/yyyy KK:mm:ss a形式で取得しています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()); 
     } 

私のコードです。しかし、UTCの時間フォーマットではありません。 この問題を解決するにはどうすればよいですか?

+0

返品は何ですか? – Buddha

+1

dateObjを印刷する代わりに、aRevisedDateを印刷する必要がありますか? – Julien

+4

UTCは特定の日付形式ではなく、タイムゾーンのようなものです。 – Henry

答えて

9

Zまたはzタイムゾーンフラグを使用して日付をフォーマットしよう:

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

はこれを試してみてください...私のために働いたと、このofcourseの10/22/2013 01:37:56 AMを印刷は、少しだけ修正して、あなたのコードです。どのようなタイムゾーン

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

あなたの入力文字列は、それがoffset from UTCを欠いていることを除いて、ISO 8601形式です。ここで

ジョダタイム

は、タイムゾーンを処理する方法をお見せするために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(); 

他の形式の文字列表現を生成する場合は、「Joda形式」のStackOverflowを検索します。