如何在Android中以浮点数形式获取结束时间

问题描述 投票:-1回答:3

我有一个像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 AM。在放下之后,他需要到达目的地,并且花了20分钟,这是在float中,需要转换为字符串,如果我们加上这2,我们需要将总时间设为08:50,现在这总时间需要另存为float

我需要像1.30 = 1.5这样

java android datetime duration timeofday
3个回答
1
投票

java.time和ThreeTenABP

我建议您将Java.time(现代Java日期和时间API)用于时间数学。您不能在一段时间内使用Date。而是将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,这是现代类的backport(JSR 310的ThreeTen;请参见底部的链接。
  • 在(较旧的)Android上,请使用Android版的ThreeTen Backport。叫做ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类。

链接


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

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.