Java中从日期字符串获取特定日期格式

6

我有一个日期字符串,格式为:

"20120514045300.0Z"

我正在尝试将此内容转换为以下格式。
"2012-05-14-T045300.0Z"

你认为我应该如何解决这个问题?(内容涉及it技术)

1
请查看SimpleDateFormat指南以及如何使用它的相关内容。 - Simon Dorociak
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.

(从这里改编:如何从给定的字符串中获取日期部分?。)

我认为你漏掉了一个破折号,yyyy-MM-dd'T'HHmmss.'0Z' 应该是 yyyy-MM-dd'-T'HHmmss.'0Z'。因为你的方式会打印出 2012-05-14T045300.0Z 而不是 2012-05-14-T045300.0Z - npinti

2
你需要解析日期并将其格式化为所需的形式。使用SimpleDateFormat来完成。你还可以查看这个问题以获取更多详细信息。

1
@Quoi:与aioobe的答案相比,这不是一个的答案,但我认为它一个答案。 - Jon Skeet
我认为我们在这里不仅仅是为了提供解决问题的代码。我已经提供了一个类的链接,如果你花一些时间学习,就足以解决问题。提供可工作的代码对于学习没有任何帮助。不过,我们可以将这个讨论迁移到元数据。 - Vladimir Ivanov

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();

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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接