将字符串转换为时间并计算差异

时间:2011-07-14 09:13:19

标签: java time

我有两个字符串:1.20.21.23.0

它们是分钟,即1.20.2代表1分20.2秒。

如何将这些字符串转换为时间值然后进行减法?

例如:

1.23.0 - 1.20.2 = 0.2.8

5 个答案:

答案 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