Преобразование бега - PullRequest
       1

Преобразование бега

1 голос
/ 09 марта 2012

Я пытаюсь преобразовать скорость бега, которую я получаю в формате строки (скажем: «5:00» за 5 минут / милю). (Я конвертирую мин / милю в мин / км).

Итак, вот что я делаю:

String milePace = "05:00";
DateFormat sdf = new SimpleDateFormat("mm:ss");
Date date = sdf.parse(milePace);

Calendar cal = Calendar.getInstance();
cal.setTime(date);

long mileTime = cal.getTimeInMillis();
long kmPace = Math.round(mileTime * 0.623712);

cal.setTimeInMillis(kmPace);

Это, к сожалению, имеет смысл для меня, но не работает.

0,623712 будет конвертирующей единицей и будет работать (насколько мне известно).

Когда я проверяю значение mileTime, я получаю 18240000. Насколько я понимаю, это проблема, поскольку это значение должно быть 240000 (что будет 4 минуты * 60 секунд * 1000)

Есть ли проблема с кодом или что-то из функции cal, которое дало бы мне дополнительные 18000000 миллисекунд?

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 09 марта 2012

getTimeInMillis() возвращает количество миллисекунд с 1970 UTC.Это будет зависеть от часового пояса вашего парсера и от того, какую дату парсер решит использовать для вашего ввода.

Я бы посоветовал вам использовать Joda Time и проанализировать значение какPeriod вместо.

Пример кода:

import org.joda.time.*;
import org.joda.time.format.*;
import java.util.*;

public class Test {
    public static void main(String[] args) {
        String text = "05:00";

        PeriodFormatter formatter = new PeriodFormatterBuilder()
            .minimumPrintedDigits(2)
            .appendMinutes()
            .appendSeparator(":")
            .appendSeconds()
            .toFormatter();

        Period milePeriod = formatter.parsePeriod(text);

        long mileMillis = milePeriod.toStandardDuration().getMillis();
        long kmMillis = Math.round(mileMillis * 0.623712);

        PeriodType minutesSeconds = PeriodType.time()
            .withMillisRemoved()
            .withHoursRemoved();

        Period kmPeriod = new Period(kmMillis, minutesSeconds);

        System.out.println(formatter.print(kmPeriod)); // Prints 03:07
    }
}
1 голос
/ 09 марта 2012

Проблема в том, что вы Calendar.getInstance(); измените это на

Calendar cal = new GregorianCalendar();

cal.set(<Calendar Constants); Ссылка

long miletime = cal.getTimeInMillis();

0 голосов
/ 09 марта 2012

Если вы знаете, что ваше время будет оставаться в диапазоне от 0 до 59 минут включительно, с гранулярностью 1 с, вы можете сделать это следующим образом:

s = new java.text.SimpleDateFormat ("s");
m = new java.text.SimpleDateFormat ("m");
int secs = Integer.parseInt (s.format (sdf.parse ("05:00")));
int mins = Integer.parseInt (m.format (sdf.parse ("05:00")));

Добавление часов может не потребоваться - или выизмерить что-то такое медленное?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...