3

Webサービスから受け取った日付文字列の解析/フォーマットに苦労しています。私は複数のアプローチを試みましたが、運がありませんでした。

サンプルの日付文字列:

2011-10-05T03:00:00Z

例外:

W/System.err(10072): java.text.ParseException: Unparseable date: "2011-10-05T05:00:00Z" (at offset 10)
W/System.err(10072):    at java.text.DateFormat.parse(DateFormat.java:626)

サンプルコード:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:SSSS");
Date date = formatter.parse(info.AiringTime);

日付と時刻の間の「T」を削除してスペースに置き換えると、正常にフォーマットされることがわかりました。誰か提案がありますか?

- アップデート -

APIドキュメントを詳しく調べたところ、次のことがわかりました。

すべての応答DateTime値はUTC形式です。表示の現地時間を計算するには、UTCオフセットを適用する必要があります。

DateTimeは、次のいずれかの形式で指定された日時の値です。

UTC形式:YYYY-MM-DDThh:mm:ssZ。例:2011-03-15T02:00:00Z。

オフセットのある現地時間:YYYY-MM-DDThh:mm:ss +または--hh:mm(正または負のオフセット)。たとえば、米国太平洋時間の場合:2011-03-14T06:00:00-08:00。

UTC形式のアプローチに関する提案はありますか?

4

5 に答える 5

11

あなたは試すことができます:

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
String dateString = dateString.replace("Z", "GMT+00:00");
Date date = dateFormat.parse(dateString);

上記のコードは、日付にタイムゾーンが指定されている場合を正しく処理する必要があります。ZはUTC/GMTタイムゾーンを表すため、GMTに置き換えられ、SimpleDateFormatが正しく解釈できるようになります(誰かが知っている場合は、このビットをよりクリーンに処理する方法を知りたいです)。

于 2011-10-06T03:08:30.220 に答える
2

試す、

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
于 2011-10-06T03:02:18.573 に答える
1

このパターンは、指定した日付を解析する必要があります"yyyy-MM-dd'T'HH:mm:ss'Z'"
使用したいSimpleDateFormatバリエーションの数が限られている場合は、パターンごとに個別のフォーマッターを作成し、それらをチェーンすることができます。

Date date = formatter1.parse(info.AiringTime);
if (date == null)
{
  date = formatter2.parse(info.AiringTime);
  if (date == null)
  {
    date = formatter2.parse(info.AiringTime);
    if (date == null)
    {
      date = formatter3.parse(info.AiringTime);
    }
  }
}

または、それらをリストに入れて、null以外になるか、フォーマッターがなくなるまで繰り返します。
パターンが多すぎて実用的でない場合は、自分で解析するか、これらのライブラリの1つを試すことができます。

于 2011-10-06T03:17:56.773 に答える
0

これは私のために働いた

    SimpleDateFormat isoDateFormat = new SimpleDateFormat("yyyy-mm-dd'T'hh:mm:ss'Z'");
    SimpleDateFormat viewFriendlyDateFormat = new SimpleDateFormat("dd/MMM/yyyy hh:mm:ss aaa");
    String viewFriendlyDate = "";
    try {
        Date date = isoDateFormat.parse(timestamp);
        viewFriendlyDate = viewFriendlyDateFormat.format(date);

    } catch (ParseException e) {
        e.printStackTrace();
    }
于 2017-11-24T13:12:37.333 に答える
0
SimpleDateFormat isoDateFormat = new SimpleDateFormat("yyyy-mm-dd'T'hh:mm:ss'Z'");
SimpleDateFormat viewFriendlyDateFormat = new SimpleDateFormat("dd/MMM/yyyy hh:mm:ss aaa");
String viewFriendlyDate = "";
try { 
    Date date = isoDateFormat.parse(timestamp);
    viewFriendlyDate = viewFriendlyDateFormat.format(date);

} catch (ParseException e) { 
    e.printStackTrace(); 
} 
于 2017-11-24T13:13:01.603 に答える