Intereting Posts
Java mmap не работает на Android с «mmap не удалось: ENOMEM (Out of memory)» Предупреждение безопасности Google Play для небезопасного TrustManager Android: Дублирование элемента View в группе ViewGroup Почему мой StringRequest всегда работает с методом onErrorResponse? Пример полнотекстового поиска в Android Как читать Pdf на Android без использования сторонних приложений? Как подключиться к известному WiFI с помощью Intent в Android? Как добавить представления к линейной компоновке? Уменьшите размер растрового изображения до определенного пикселя в Android Альтернативы использованию базы данных Web SQL для хранения большого количества данных в приложении Phonegap? Эффект Parallax в ViewPager Android Как сделать запрос https с сертификатом ssl в «Дооснащение» Как реализовать свернутое изображение, например приложение Google IO 2015, используя библиотеку дизайна Нежелательная новая строка в TextView с использованием HTML Хорошие шаблоны проектирования для кодирования многих HTTP-запросов в Android

Вычислить разницу между двукратным андроидом

Я разрабатываю приложение android, где мне нужно рассчитать разницу между двумя моментами. Мне нужно рассчитать разницу во времени в течение 24 часов, а также разницу между временами на два дня (например, с 17:00 до 9:00 завтра).

Я попробовал приведенный ниже код, чтобы рассчитать разницу, которая работает только в течение 24 часов,

String dateStart = "08:00:00"; String dateStop = "13:00:00"; //HH converts hour in 24 hours format (0-23), day calculation SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); Date d1 = null; Date d2 = null; try { d1 = format.parse(dateStart); d2 = format.parse(dateStop); //in milliseconds long diff = d2.getTime() - d1.getTime(); long diffHours = diff / (60 * 60 * 1000) % 24; Log.e("test",diffHours + " hours, "); } catch (Exception e) { // TODO: handle exception } 

Сэр, вы можете легко использовать функцию java. long difference = date2.getTime() - date1.getTime(); Взгляните на эту ссылку, это поможет вам.

Вы можете попробовать что-то подобное, если вы уверены, что на следующий день вы можете добавить один день и рассчитать разницу:

 String string1 = "05:00:00 PM"; Date time1 = new SimpleDateFormat("HH:mm:ss aa").parse(string1); Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(time1); String string2 = "09:00:00 AM"; Date time2 = new SimpleDateFormat("HH:mm:ss aa").parse(string2); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(time2); calendar2.add(Calendar.DATE, 1); Date x = calendar1.getTime(); Date xy = calendar2.getTime(); long diff = x.getTime() - xy.getTime(); diffMinutes = diff / (60 * 1000); float diffHours = diffMinutes / 60; System.out.println("diff hours" + diffHours); 

Правильный способ найти правильную временную разницу:

 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); Date startDate = simpleDateFormat.parse("22:00"); Date endDate = simpleDateFormat.parse("07:00"); long difference = endDate.getTime() - startDate.getTime(); if(difference<0) { Date dateMax = simpleDateFormat.parse("24:00"); Date dateMin = simpleDateFormat.parse("00:00"); difference=(dateMax.getTime() -startDate.getTime() )+(endDate.getTime()-dateMin.getTime()); } int days = (int) (difference / (1000*60*60*24)); int hours = (int) ((difference - (1000*60*60*24*days)) / (1000*60*60)); int min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours)) / (1000*60); Log.i("log_tag","Hours: "+hours+", Mins: "+min); 

Результат будет: Часы: 9, Мин.: 0

ТЛ; др

 ChronoUnit.HOURS.between( LocalTime.parse( "08:00:00" ) , LocalTime.parse( "13:00:00" ) ) 

5

…или…

 ChronoUnit.HOURS.between( ZonedDateTime.of( LocalDate.of( 2017 , Month.JANUARY , 23 ) , LocalTime.parse( "08:00:00" ) , ZoneId.of( "America/Montreal" ) ) , ZonedDateTime.of( LocalDate.of( 2017 , Month.JANUARY , 25 ) , LocalTime.parse( "13:00:00" ) , ZoneId.of( "America/Montreal" ) ) ) 

53

java.time

Современный подход использует классы java.time.

LocalTime

Класс LocalTime представляет собой время суток без даты и без часового пояса.

 LocalTime start = LocalTime.parse( "08:00:00" ) ; LocalTime stop = LocalTime.parse( "13:00:00" ) ; 

Duration

Получите объект Duration чтобы отображать промежуток времени.

 Duration d = Duration.between( start , stop ) ; 

ChronoUnit

Для количества часов используйте ChronoUnit .

 long hours = ChronoUnit.HOURS.between( start , stop ) ; 

Android

Для Android см. Проекты ThreeTen-Backport и ThreeTenABP. Смотрите последние патроны ниже.

ZonedDateTime

Если вы хотите пересечь дни, пройдя за полночь, вы должны назначить даты и часовые пояса.

Часовой пояс имеет решающее значение для определения даты. В любой данный момент дата изменяется по всему миру по зонам. Например, через несколько минут после полуночи в Париже Франция – новый день, еще «вчера» в Монреале Квебек .

Укажите правильное имя часового пояса в формате continent/region , например, America/Montreal , Africa/Casablanca или Pacific/Auckland . Никогда не используйте аббревиатуру 3-4 букв, такую ​​как EST или IST поскольку они не являются настоящими часовыми поясами, а не стандартизированы и даже не уникальны (!).

 ZoneId z = ZoneId.of( "America/Montreal" ) ; ZonedDateTime start = ZonedDateTime.of( LocalDate.of( 2017 , Month.JANUARY , 23 ) , LocalTime.parse( "08:00:00" ) , z ) ; ZonedDateTime stop = ZonedDateTime.of( LocalDate.of( 2017 , Month.JANUARY , 25 ) , LocalTime.parse( "13:00:00" ) , z ) ; long hours = ChronoUnit.HOURS.between( start , stop ) ; 

Посмотрите, как этот код работает в режиме реального времени на IdeOne.com .

53


О java.time

Рамка java.time встроена в Java 8 и более поздних версий . Эти классы вытесняют неприятные старые устаревшие классы времени, такие как java.util.Date , Calendar и SimpleDateFormat .

Проект Joda-Time , теперь в режиме обслуживания , советует перейти на классы java.time .

Дополнительную информацию можно найти в учебнике Oracle . И поиск Stack Overflow для многих примеров и объяснений. Спецификация – JSR 310 .

Где получить классы java.time?

  • Java SE 8 , Java SE 9 и более поздние версии
    • Встроенный.
    • Часть стандартного Java API с интегрированной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональных возможностей java.time портирована на Java 6 и 7 в ThreeTen-Backport .
  • Android
    • Проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше) специально для Android.
    • См. Как использовать ThreeTenABP ….

Я проработал так:

 Date time1 = new SimpleDateFormat("HH:mm:ss aa").parse(string1); Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(time1); Date time2 = new SimpleDateFormat("HH:mm:ss aa").parse(string2); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(time2); if(calendar2.get(Calendar.AM_PM) == 1 && calendar1.get(Calendar.AM_PM) == 0) { calendar2.add(Calendar.DATE, 1); } long diff = calendar1.getTimeInMillis() - calendar2.getTimeInMillis() 

Это поможет найти разницу во времени круглосуточно.

 Try simple piece of code using For 24 hour time StartTime = "10:00"; EndTime = "13:00"; here starthour=10 and end hour=13 if(TextUtils.isEmpty(txtDate.getText().toString())||TextUtils.isEmpty(txtDate1.getText().toString())||TextUtils.isEmpty(txtTime.getText().toString())||TextUtils.isEmpty(txtTime1.getText().toString())) { Toast.makeText(getApplicationContext(), "Date/Time fields cannot be blank", Toast.LENGTH_SHORT).show(); } else { if (starthour > endhour) { Toast.makeText(getApplicationContext(), "Start Time Should Be Less Than End Time", Toast.LENGTH_SHORT).show(); } else if (starthour == endhour) { if (startmin > endmin) { Toast.makeText(getApplicationContext(), "Start Time Should Be Less Than End Time", Toast.LENGTH_SHORT).show(); } else{ tvalid = "True"; } } else { // Toast.makeText(getApplicationContext(),"Sucess"+(endhour-starthour)+(endmin-startmin),Toast.LENGTH_SHORT).show(); tvalid = "True"; } } same for date also