我正在尝试转换我以字符串格式获得的运行速度(例如:“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毫秒吗?
提前致谢!
答案 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")));
可能没有必要增加时间 - 或者你测量的速度慢吗?