java中日期字符串的特定日期格式

时间:2012-05-17 07:20:12

标签: java string format

我有一个

的日期字符串
"20120514045300.0Z"

我正在试图弄清楚如何将其转换为以下格式

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

您如何建议我应该解决它?

4 个答案:

答案 0 :(得分:8)

您应该将日期解析为适当的表示形式,并从该表示格式解析输出,而不是潜入难以阅读的字符串操作代码。如果可能的话,我建议你坚持使用一些现有的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?。)

答案 1 :(得分:2)

您需要解析日期并将其格式化为所需的格式。使用SimpleDateFormat执行此操作。您还可以查看this问题以获取更多详细信息。

答案 2 :(得分:0)

您不一定要使用DateFormat这样简单的事情。您知道原始日期字符串的格式是什么,并且您不需要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();

答案 3 :(得分: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);
}