4

ミリ秒値の桁数が可変のように見える Web サイトから日付/時刻文字列を受け取りました。

サンプル:

2013-08-15T06:21:49.35054+01:00

2013-08-15T06:21:49.350546+01:00

2013-08-15T06:21:49+01:00

現在私は使用しています:

static final Map<Integer,DateTimeFormatter> parsers = new HashMap<Integer,DateTimeFormatter>();
static {
  parsers.put("2013-07-23T22:44:00+01:00".length(),
              DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ"));
  parsers.put("2013-07-27T18:00:59.9+01:00".length(),
              DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SZ"));
  parsers.put("2013-07-27T18:00:59.99+01:00".length(),
              DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSZ"));
  parsers.put("2013-07-27T18:00:59.999+01:00".length(),
              DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"));
  parsers.put("2013-07-27T18:00:59.9999+01:00".length(),
              DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSZ"));
  parsers.put("2013-07-27T18:00:59.99999+01:00".length(),
              DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSZ"));
  parsers.put("2013-07-27T18:00:59.999999+01:00".length(),
              DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ"));
  parsers.put("2013-07-27T18:00:59.9999999+01:00".length(),
              DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ"));
}

public static Date parseDate(String date) {
  return parsers.get(date.length()).parseDateTime(date).toDate();
}

これを行うためのよりきちんとした方法はありますか?

4

3 に答える 3

0

ISO-8601を扱っているので、この方法を使用したいと思います

public static Date getDateFromIsoISO8601(String str) {
        try {
            return ISO8601Utils.parse(str, new ParsePosition(0));
        } catch (Exception e) {
            Log.e("Parsing","error:getDateFromIsoISO8601: " + e.getMessage());
            return null;
        }
    }

Joda タイムを使用する

于 2016-12-28T12:39:52.483 に答える
0

シンボルを分割して+、必要な残りの小数点以下の桁数を追加してみませんか? 例えば。変化する

2013-08-15T06:21:49.35054

2013-08-15T06:21:49.350540

そして、それを使用するだけです DateTimeFormat

于 2013-08-15T09:55:47.390 に答える