Преобразовать строку во время и рассчитать разницу - PullRequest
4 голосов
/ 14 июля 2011

У меня есть две строки: 1.20.2 и 1.23.0

Это минуты, т.е. 1.20.2 означает 1 минуту 20,2 секунды.

Как я могу преобразовать эти строки в значения времени, а затем выполнить вычитание?

Например:

1.23.0 - 1.20.2 = 0.2.8

Ответы [ 5 ]

4 голосов
/ 14 июля 2011

Я бы предпочел использовать 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
2 голосов
/ 14 июля 2011

Вы должны использовать 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 интерпретирует это значение.

1 голос
/ 14 июля 2011

Используйте SimpleDateFormat , чтобы преобразовать их в Date объекты.Затем используйте Date.getTime(), чтобы получить «миллисекунды с начала эпохи», вычислите разницу.

0 голосов
/ 14 июля 2011

Всегда ли время в одном и том же формате?Если это так, вы можете использовать метод split(String regex), например:

String time1 = "1.20.2";
String[] splitTime1 = time1.split(",");

Это даст вам строковый массив.Я не знаю, насколько важно, чтобы вы конвертировали их в DateTime - лично я конвертировал бы каждый элемент в массиве в целые числа тех же единиц, например:

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;
0 голосов
/ 14 июля 2011

Это должно быть легко, вы пытались решить это самостоятельно?

В любом случае, псевдокод будет выглядеть как

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...