サーバーと通信するAndroidでアプリを作成しています。そのサーバーは、次のようなISO8601日付文字列を返します。
2014-11-21 12:24:56.662061-02
次に、JavaのSimpleDateFormatterを使用して、次のように文字列を解析しようとしています。
Locale l = new Locale("pt","BR");
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSSZZ",l).parse(str_date);
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(date.getTime());
つまり、このソリューションは部分的に機能します。年、月、日、時間を正しく取得することはできますが、時間、分、秒になると、常に分が間違ってしまいます。例の文字列を使用して印刷しようとすると、「12:24」ではなく「12:35」のようになります。ロケールを使用せずにロケールを使用してさまざまなマスクを試しましたが、何も機能しないようです。
このリンクで、SimpleDateFormatterがISO 8601を十分にサポートしていないことを確認しました。その人は、javax.xml.bind.DatatypeConverter.parseDateTime()メソッドを使用してソリューションを提供しましたが、DatatypeConverterはAndroidSDKに存在しません。だから...この文字列を正しく解析するにはどうすればよいですか?
S
ミリ秒です。662061は662秒= 11分です。
どういうわけかマイクロ秒を捨てて、SSSを使用してください。
str_date = str_date.replaceFirst("(\\d\\d[\\.,]\\d{3})\\d+", "$1");
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加