2012-03-08 42 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"))); 

添加小時可能沒有必要 - 或者你衡量的東西,慢?