-1

我现在有一个像 08:25 这样的字符串时间格式,如何转换为浮点时间值

    String guestclosetime = getCurrentTime();
    SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");

    timeFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    try {

        System.out.println("starttime"+ TestRideFragment.getCurrentTime());
        // convert12to24format(guestclosetime);
        Date date1 = timeFormat.parse("00:20");//run
        Date date2 = timeFormat.parse(guestclosetime);
        //Date date3=timeFormat.parse(idle_time);

        long sum = date1.getTime() + date2.getTime();

        String date3 = timeFormat.format(new Date(sum));
        System.out.println("The sum is "+date3);// 08:28

现在我需要 date3 作为 float 我在 android 中该怎么做。

看到我有一个场景,因为司机在 x 地方丢了一个人,我得到了当前时间,比如上午 08:30。下车后他需要到达目的地,他花了 20 分钟,这是浮点数,需要转换为字符串,如果我们添加这个 2,我们需要得到总时间为 08:50 现在这个总时间需要保存为浮点数

我需要像 1.30 = 1.5 这样

4

3 回答 3

1

java.time 和 ThreeTenABP

我建议您使用现代 Java 日期和时间 API java.time 来计算时间。您不能使用 aDate一段时间。而是LocalTime在一天Duration中的某个时间和一段时间内使用一段时间。

    LocalTime dropOff = LocalTime.of(8, 30);
    System.out.println("Drop-off: " + dropOff);

    Duration timeToDest = Duration.ofMinutes(20);
    LocalTime end = dropOff.plus(timeToDest);
    System.out.println("Time at destination: " + end);

输出:

Drop-off: 08:30
Time at destination: 08:50

转换为flaot表示自午夜以来的小时数:

    float hoursSinceMidnight = (float) end.getLong(ChronoField.NANO_OF_DAY)
            / (float) Duration.ofHours(1).toNanos();
    System.out.println("As float: " + hoursSinceMidnight);
As float: 8.833334

问题:java.time 不需要 Android API 级别 26 吗?

java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少Java 6

  • 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。
  • 在非 Android Java 6 和 7 中获得 ThreeTen Backport,现代类的后向端口(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从org.threeten.bp子包中导入日期和时间类。

链接

于 2020-05-31T09:12:26.717 回答
0

这里

String date3 = timeFormat.format(new Date(sum));
// First you have to replace ":" to "." to get valid string that can be converted to float
String strDate = date3.replace(":", ".");
// Use Float.value() to convert
Float floatValue = Float.valueOf(strDate);
于 2020-05-30T02:58:52.667 回答
0

那是你的目标吗?

“1:30” => 1.5 “1.83” => 1.83 “0.5” => 0.5

如果你尝试正确

public static float HoursToFloat(String tmpHours)  {
    float result = 0;
    tmpHours = tmpHours.trim();
    try {
        result = new Float(tmpHours);
    } catch (NumberFormatException nfe) {

        if (tmpHours.contains(":")) {
            int hours = 0;
            float minutes = 0; 
            try {
                hours = Integer.parseInt(tmpHours.split(":")[0]);
                minutes = Integer.parseInt(tmpHours.split(":")[1]); 
            } catch (Exception nfe2) {
                throw nfe2;
            }

            if (minutes > 0) {
                result = minutes / 60;
            }
            result += hours;
        }
    }
    return result;
}
于 2020-05-30T03:59:38.140 回答