两部手机评估SimpleDateFormat(...)。parse(String)的方式不同。为什么呢?

时间:2017-12-19 22:41:15

标签: android

我是Android的新手(这是我的第一个应用,请温柔:D)我的两部手机出现问题,似乎没有用同样的方式评估毫秒数。我有一个搭载Android 5.0.1(Lollipop)的三星S4和带有4.4.2(KitKat)的S3Neo。

问题出现在我的CalcUtils.timeToMillis(String time)函数中,我的调用如下:referenceTime = CalcUtils.timeToMillis("32.50");。即,两部手机都获得相同的参数" 32.50"在电话中。

我的S3Neo返回I/CalcUtils: time '0:32.50' is 32050 ms(我需要以毫秒为单位进行游泳计算以及此手机上的结果与我的图表不匹配),而我的S4返回I/CalcUtils: time '0:32.500' is 32500 ms(这就是我要做的)期望)

下面是我的CalcUtils类的完整代码:

import android.util.Log;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;


public class CalcUtils {

    private static final String TAG = "CalcUtils";

    public static int timeToMillis(int minutes, int seconds, int milliseconds) {
        int result = minutes * 60000 + seconds * 1000 + milliseconds;
        Log.i(TAG, String.format("time '%d:%d.%d' is %d ms", minutes, seconds, milliseconds, result));
        return result;
    }

    public static int timeToMillis(String time) {
        List<String> formatStrings = Arrays.asList("mm:ss.SS", "ss.SS");
        for (String formatString : formatStrings) {
            try {
                Date timeFormat = new SimpleDateFormat(formatString).parse(time);
                Calendar calendar = GregorianCalendar.getInstance();
                calendar.setTime(timeFormat);   // assigns calendar to given date
                int minutes = calendar.get(Calendar.MINUTE);
                int seconds = calendar.get(Calendar.SECOND);
                int milliseconds = calendar.get(Calendar.MILLISECOND);
                return timeToMillis(minutes, seconds, milliseconds);
            } catch (ParseException e) {
                Log.i(TAG, String.format("Could not parse: %s with format %s", time, formatString));
            }
        }

        // no time was parsed!
        return 0;
    }
}

我认为问题源于不同的API如何评估毫秒。但是,我无法找到任何证据。这让我有几个问题:

  1. 我应该怎么知道什么时候应该特别注意一个电话,因为它可能依赖于API?
  2. 我怎么搜索这类细节?我无法测试每部手机,但我正在为我的父亲编写应用程序,因为我的父亲手机比我的手机还要老:)
  3. 如何修复此功能,以便在两个平台上返回相同的结果?我可以把时间花在#34; 32.500&#34;上,但我实际上并不感兴趣于&#39; millesimal-part&#39; ...无论如何,这不是回答上面的问题。
  4. 修改 我挖了一点点。问题似乎发生在Date timeFormat = new SimpleDateFormat(formatString).parse(time);。在那次通话之后(具有相同的参数!),S3Neo已经有32050而S4有32500.我需要他们两个都返回32500,但特别是我想知道< strong>为什么这种情况正在发生。

1 个答案:

答案 0 :(得分:1)

试着改变&#34; SS&#34;到&#34; SSS&#34;。

毫秒总是3位数。