5

私は日付文字列を持っています

"20120514045300.0Z"

これを次の形式に変換する方法を見つけようとしています

"2012-05-14-T045300.0Z"

どのように解決すればよいと提案しますか?

4

4 に答える 4

9

読みにくい文字列操作コードに飛び込む代わりに、日付を適切な表現に解析し、その表現形式から出力する必要があります。可能であれば、既存の API を使用することをお勧めします。

に基づいたソリューションを次に示しSimpleDateFormatます。(0Zただし、その部分はハードコードされています。)

String input = "20120514045300.0Z";

DateFormat inputDF  = new SimpleDateFormat("yyyyMMddHHmmss'.0Z'");
DateFormat outputDF = new SimpleDateFormat("yyyy-MM-dd'-T'HHmmss.'0Z'");

Date date = inputDF.parse(input);
String output = outputDF.format(date);

System.out.println(output);  // Prints 2012-05-14-T045300.0Z as expected.

(ここから適応: How to get Date part from given String? .)

于 2012-05-17T07:29:16.327 に答える
2

日付を解析する必要があり、日付を望ましい形式にフォーマットします。それを行うために使用SimpleDateFormatします。詳細については、この質問を確認することもできます。

于 2012-05-17T07:24:36.930 に答える
0

DateFormatこのような単純なことに必ずしも a を使用する必要はありません。Date元の日付文字列の形式が何であるかを知っていて、オブジェクトは必要なく、 String. Stringしたがって、次のように(中間Dateオブジェクトを作成せずに)に直接変換するだけです。

String s = "20120514045300.0Z";
String formatted = s.substring(0, 4) + '-' + s.substring(4, 6) + '-' + s.substring(6, 8) + "-T" + s.substring(8);

次のように使用することもできStringBuilderます (ただし、これは配列のコピーのために少し非効率的です)。

StringBuilder sb = new StringBuilder(s);
sb.insert(4, '-').insert(7,'-').insert(10,"-T");
String formatted = sb.toString();
于 2012-05-17T07:34:31.330 に答える
0

文字列を再フォーマットする必要があるだけの場合は、次のようなものを使用できます。

String str = "20120514045300.0Z";
Pattern p = Pattern.compile("^(\\d{4})(\\d{2})(\\d{2})(.+)$");
Matcher m = p.matcher(str);
if (m.matches())
{
    String newStr = m.group(1) + "-" + m.group(2) + "-" + m.group(3) + "-T" + m.group(4);
    System.out.println(newStr);
}
于 2012-05-17T07:38:57.210 に答える