1

我正在尝试删除此字符串的秒数:

10/31/2009 9:46:16 AM

我正在尝试使用以下功能来做到这一点:

public static String correctValue4(String str) {
    String parts[] = str.split(":");
    String fixedStr = parts[0] + ":" + parts[1];
    return fixedStr;
}

我想它会解析它并获得 10/31/2009 9,然后在末尾添加 46。但是,我在运行时收到“java.lang.ArrayIndexOutOfBoundsException: 1”错误。显然,它没有拿起零件[1]。

有任何想法吗?

对于额外的业力:我需要将 AM/PM 附加到字符串的末尾。所以,最后它应该是这样的:

10/31/2009 9:46 AM

谢谢,非常感谢您的帮助=)

编辑:

对不起,我应该更具体地说明日期。我正在做的是将制表符分隔的文本文件接受到应用程序中,然后对其进行格式化并将其输出到新文件中。我需要做的就是根据请求从日期中删除秒数并输出它;我想我只是把它复杂化了。

蒂姆的回答在这种情况下有效!

谢谢大家提供建议!

4

4 回答 4

6

我会建议一种完全不同的方法:将值解析为适当的特定于域的类型(我会LocalDateTimeJoda Time使用),然后将其重新格式化为您想要的格式。这将同时执行验证,因此您不会仅仅因为它恰好有一个冒号就通过您的系统传播不良数据。

Joda Time 提供解析和格式化工具(请参阅DateTimeFormatDateTimeFormatter),所以它应该非常简单。

于 2012-04-28T16:15:57.217 回答
4

你为什么不使用SimpleDateFormat

首先解析日期:

Date d = new SimpleDateFormat("MM/dd/yyyy h:mm:ss a").format(str);

然后格式化日期:

new SimpleDateFormat("MM/dd/yyyy h:mm a").format(d);

于 2012-04-28T16:18:13.720 回答
1

如果空格是紧随其后的下一个字符,您就不能删除后跟两位数字的冒号吗?

String resultString = subjectString.replaceAll(":\\d{2}(?= )", "");
于 2012-04-28T16:14:09.707 回答
1

如果字符串始终具有相同的格式(以 2 位数字结尾,一个空格,它们是 AM 或 PM),您可以substring使用每个String实例上可用的方法提取相关部分

String original = "10/31/2009 9:46:16 AM";
//-6 since we want to remove the : as well
String firstPart = original.substring( 0, original.length() - 6 );
String secondPart = original.substring( original.length() - 3, original.length() );
String result = firstPart + secondPart;
于 2012-04-28T16:19:44.780 回答