3
String date = "2012-11-28 12:30:30";

我想2012-11-28 12:00:00使用以下String.replace方法替换日期:

String replacedDate = date.replace(date.substring(14, 19), "00:00");

它工作正常,但如果日期是:

String date = "2012-11-28 18:18:18";

使用上述方法,结果将是2012-11-28 00:00:28,但我希望输出是2012-11-28 18:00:00

4

5 回答 5

5

您不需要在String.replace此处使用该方法。如果您知道要替换的确切索引并且确定它们将始终相同,那么您可以使用子字符串和字符串连接:

String date = "2012-11-28 12:30:30";
date = date.substring(0, 14) + "00:00";

在线查看它:ideone

注意:如果您的字符串确实代表日期,请考虑使用类型变量Date而不是String.

于 2012-11-28T11:53:36.393 回答
4

您可以使用忽略分钟和秒的日期解析器,而不是直接操作字符串:

String s = "2012-11-28 12:30:30";
//skip the minutes, seconds
Date date = new SimpleDateFormat("yyyy-MM-dd HH").parse(s); 

String result = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
System.out.println("result = " + result);

奖励:如果日期不是预期的格式,你会得到一个有用的例外

于 2012-11-28T11:54:44.100 回答
1

这是一个日期/时间。通过将上述内容解析为合适的日期/时间对象并使用与日期/时间相关的方法对其进行操作来处理它这样您就不必依赖子字符串/正则表达式等,也不会冒创建无效日期/时间参考的风险。

例如,使用SimpleDateFormatCalendarJoda-Time以获得更直观和强大的 API。

目前你有一个字符串类型的系统,而不是一个类型的系统。

于 2012-11-28T11:54:35.090 回答
0

你也可以要求第一个':'然后添加“00:00”

String date="2012-11-28 18:18:18";
int i = date.indexOf(':');
String format = date.substring(0,i+1) + "00:00";
于 2012-11-28T12:01:11.837 回答
0

我认为您的解决方案不起作用,因为 replace 方法具有此签名

public String replace(char oldChar, char newChar)

不是

public String replace(String oldChar, String newChar)

这个答案是为了理解问题,解决它,考虑其他很好的答案!

于 2012-11-28T12:03:00.620 回答