我有一个日期字符串
"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.
(改编自这里:如何从给定的字符串中获取日期部分?。)
您需要解析日期并将其格式化为所需的形式。用来SimpleDateFormat
做。您还可以查看此问题以获取更多详细信息。
你不一定要使用 a 来做这么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();
如果您只需要重新格式化字符串,则可以使用如下内容:
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);
}