2012-03-08 44 views
1

我试图转换一个字符串格式的运行速度(例如:5分钟/英里的“5:00”)。 (我将分钟/英里转换为分钟/公里)。转换跑步速度

因此,这里是我在做什么:

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.据我所看到的,这是问题,因为这个值应该是24万(这将是4mins * 60秒* 1000)

是否有问题用代码还是有一些cal函数会给我额外的18000000毫秒?

在此先感谢!

回答

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

的问题是你 Calendar.getInstance();这一变化

Calendar cal = new GregorianCalendar();

cal.set(<Calendar Constants);Reference

long miletime = cal.getTimeInMillis();

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"))); 

添加小时可能没有必要 - 或者你衡量的东西,慢?