私は日付文字列を持っています
"20120514045300.0Z"
これを次の形式に変換する方法を見つけようとしています
"2012-05-14-T045300.0Z"
どのように解決すればよいと提案しますか?
読みにくい文字列操作コードに飛び込む代わりに、日付を適切な表現に解析し、その表現形式から出力する必要があります。可能であれば、既存の 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? .)
日付を解析する必要があり、日付を望ましい形式にフォーマットします。それを行うために使用SimpleDateFormat
します。詳細については、この質問を確認することもできます。
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();
文字列を再フォーマットする必要があるだけの場合は、次のようなものを使用できます。
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);
}