gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:12:43 25 4
gpt4 key购买 nike

我是 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. 如何修复此函数,使其在两个平台上返回相同的结果?我可以将时间作为“32.500”传递给我的函数,但实际上我对“毫秒部分”不感兴趣……而且,无论如何,这不能回答上述问题。

编辑我再深入一点。问题似乎发生在 Date timeFormat = new SimpleDateFormat(formatString).parse(time); 中。在那次调用之后(使用相同的参数!),S3Neo 已经有 32050,S4 有 32500。我需要它们都返回 32500,但我特别想知道 为什么会发生这种情况。

最佳答案

只需尝试将“SS”更改为“SSS”即可。

毫秒总是 3 位数。

关于android - 两部手机评估 SimpleDateFormat(...).parse(String) 的方式不同。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47896248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com