转换运行速度

时间:2012-03-08 20:24:52

标签: java calendar

我正在尝试转换我以字符串格式获得的运行速度(例如:“5:00”,持续5分钟/英里)。 (我将min / mile转换为min / km)。

所以这就是我正在做的事情:

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

答案 0 :(得分:2)

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 :(得分:1)

问题在于你 Calendar.getInstance();将此更改为

Calendar cal = new GregorianCalendar();

cal.set(<Calendar Constants); Reference

long miletime = cal.getTimeInMillis();

答案 2 :(得分:0)

如果你知道你的时间将保持在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")));

可能没有必要增加时间 - 或者你测量的速度慢吗?