Как получить время окончания как float в Android - PullRequest
0 голосов
/ 30 мая 2020

У меня был строковый формат времени, например 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 минут, это в float, необходимо преобразовать как строку, и если мы добавим это 2, нам нужно получить общее время как 08:50, теперь это общее время нужно сохранить как float

Мне нужно примерно 1,30 = 1,5 вот так

Ответы [ 3 ]

1 голос
/ 31 мая 2020

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

To преобразовать в 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 используйте Android версию ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортировали классы даты и времени из org.threeten.bp с подпакетами.

Ссылки

0 голосов
/ 30 мая 2020

Это ваша цель?

"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;
}
0 голосов
/ 30 мая 2020

Здесь

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...