我有两个字符串:1.20.2
和1.23.0
它们是分钟,即1.20.2
代表1分20.2秒。
如何将这些字符串转换为时间值然后进行减法?
例如:
1.23.0 - 1.20.2 = 0.2.8
答案 0 :(得分:4)
我更喜欢使用Joda Time,它是一个非常好的日期/时间操作API。否则你必须重新发明轮子......
在我看来,API的类和函数的名称是非常直观的
这是代码(已成功测试!):
PeriodFormatter pf = new PeriodFormatterBuilder()
.printZeroAlways() // print zero minutes
.appendMinutes()
.appendSeparator(".")
.appendSecondsWithMillis()
.toFormatter();
Period p1 = pf.parsePeriod("1.20.2");
Period p2 = pf.parsePeriod("1.23.0");
Period diff = p2.minus(p1);
System.out.println(diff.toString(pf));
// output:
// 0.2.800
答案 1 :(得分:2)
您应该使用SimpleDateFormat
,如下所示:
String min1 = "1.20.2";
String min2 = "1.23.0";
SimpleDateFormat sdf = new SimpleDateFormat("m.ss.S");
Date parse = sdf.parse(min1);
Date parse2 = sdf.parse(min2);
long diff = parse2.getTime() - parse.getTime();
Date date = new Date(diff);
String format = sdf.format(date);
System.out.println(format);
这将打印0.02.998
。要获得0.2.8
的预期结果,您必须将1.20.200
作为min2
传递,因为这是SimpleDateFormat解释此值的方式。
答案 2 :(得分:1)
使用SimpleDateFormat将其转换为Date
个对象。然后使用Date.getTime()
获取“自纪元以来的毫秒数”,计算差异。
答案 3 :(得分:0)
时间总是以相同的格式?如果是这样,您可以使用split(String regex)
方法,例如:
String time1 = "1.20.2";
String[] splitTime1 = time1.split(",");
这将为您提供一个字符串数组。我不知道将它们转换为DateTime是多么重要 - 我个人会将数组中的每个项目转换为相同单位的int,例如:
int secondsTime1;
secondsTime1 = (splitTime1[0] * 60) + (splitTime1[1]) + (splitTime1[2] * Math.pow(10, -3));
//Assume you do the same with the second time to get secondsTime2;
int difference = secondsTime1 - secondsTime2;
答案 4 :(得分:-1)
这应该很简单,你试图自己解决这个问题吗?
无论如何,伪代码看起来像
For each string
pos = string.indexOf(".")
Split string into two parts min, sec based on the index "pos"
stringSecs = min*60 + sec
Find difference of stringSecs by regular subtraction.
Convert back to required format using min = answer/60, sec=answer%60