在Java中添加两个时间字符串
在java中,我尝试使用一种自定义格式的时间刻度,然后尝试将其添加到另一个时间刻度,并以相同的格式输出。 我的日期格式为11D23H13M12S。然后我想把这个字符串,添加到类似1d 0h 0m 3s的东西中。然后输出12d 23h 13m 15s。在Java中添加两个时间字符串,java,string,Java,String,在java中,我尝试使用一种自定义格式的时间刻度,然后尝试将其添加到另一个时间刻度,并以相同的格式输出。 我的日期格式为11D23H13M12S。然后我想把这个字符串,添加到类似1d 0h 0m 3s的东西中。然后输出12d 23h 13m 15s。 感谢您的帮助。一般来说,如果您试图操纵时间,最好使用专用类来实现这一目的-在Java 8中,您希望手动将两个字符串解析为Java.time.Durations,使用Duration.plus(Duration)添加它们,然后使用Duration的各
感谢您的帮助。一般来说,如果您试图操纵时间,最好使用专用类来实现这一目的-在Java 8中,您希望手动将两个字符串解析为
Java.time.Duration
s,使用Duration.plus(Duration)
添加它们,然后使用Duration的各种to*
方法来构建结果字符串
如果您对输入和输出格式有一定的控制权,您可以更改它们以匹配Duration的格式,并在那里节省一些精力。我认为您需要一个StringBuilder这里: 例如: StringBuilder和SystemFormat(您可以创建新字符串)
如果要从头开始实现,可以使用正则表达式并执行一些计算:
package stackoverflow;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
static Pattern p = Pattern.compile("(\\d+)d (\\d+)h (\\d+)m (\\d+)s");
private static void add(String s, int[] a) {
Matcher m = p.matcher(s);
m.find();
for (int i = 0; i < a.length; i++)
a[i] += Integer.parseInt(m.group(i + 1));
}
private static String calculate(String s1, String s2) {
int a[] = new int[4];
add(s1, a);
add(s2, a);
if (a[3] >= 60) {
a[3] -= 60;
a[2]++;
}
if (a[2] >= 60) {
a[2] -= 60;
a[1]++;
}
if (a[1] >= 24) {
a[1] -= 24;
a[0]++;
}
return String.format("%dd %dh %dm %ds", a[0], a[1], a[2], a[3]);
}
public static void main(String args[]) {
String s1 = "11d 24h 13m 12s";
String s2 = "1d 0h 0m 3s";
System.out.println(calculate(s1, s2));
}
}
上面的实现没有提供任何形式错误输入的检查。可能重复@user3208218我很好奇为什么
11d 24h 13m 12s
+12d 24h 13m 12s
=13d 24h 13m 12s
?是的,很抱歉我在写它的时候把自己弄糊涂了。我现在就更改另一个问题是,您似乎希望24小时
的输出不会更改为额外的一天。你确定吗?只是为了让措辞更清楚,你不需要添加两个字符串,而是将两个字符串解析为时间段,添加这些时间段,然后将它们再次打印为字符串。这就是为什么我说使用例如Duration.toHours
,Duration.toMinutes
,来构建结果字符串的原因,等等。但是将一个持续时间
的日部分为11的持续时间添加到持续时间
的日部分为12的持续时间
,永远不会在结果的持续时间
的日部分中为您提供13的持续时间,这正是OP所希望的。因此,评论要求OP澄清他的请求。好吧,我对Java非常陌生,所以这对我来说没有多大意义。你能不能帮我把它说得小声一点?感谢基于这些评论,OP在给出的示例中似乎犯了一些小错误。我不会太在意那些细节。这真的不能解决问题。这似乎对我有用。谢谢。但是为了挑剔,我在bukkit服务器插件中使用了这个命令,当我在消息中使用该命令返回值时,结果在末尾有一个小符号。如果你知道bukkit,你可能知道如何解决这个问题。如果没有,那没关系。无论如何谢谢你
package stackoverflow;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
static Pattern p = Pattern.compile("(\\d+)d (\\d+)h (\\d+)m (\\d+)s");
private static void add(String s, int[] a) {
Matcher m = p.matcher(s);
m.find();
for (int i = 0; i < a.length; i++)
a[i] += Integer.parseInt(m.group(i + 1));
}
private static String calculate(String s1, String s2) {
int a[] = new int[4];
add(s1, a);
add(s2, a);
if (a[3] >= 60) {
a[3] -= 60;
a[2]++;
}
if (a[2] >= 60) {
a[2] -= 60;
a[1]++;
}
if (a[1] >= 24) {
a[1] -= 24;
a[0]++;
}
return String.format("%dd %dh %dm %ds", a[0], a[1], a[2], a[3]);
}
public static void main(String args[]) {
String s1 = "11d 24h 13m 12s";
String s2 = "1d 0h 0m 3s";
System.out.println(calculate(s1, s2));
}
}
13d 0h 13m 15s