Как найти разницу в scala java.util.ate в минутах?

scala> val dates = filtering1.map(x => (format.parse(x._1),format.parse(x._2)))
dates: org.apache.spark.rdd.RDD[(java.util.Date, java.util.Date)] = MapPartitionsRDD[7] at map at <console>:34

магазины ниже значений

scala> dates.collect
res0: Array[(java.util.Date, java.util.Date)] = Array((Sat Jun 30 23:42:00 IST 2018,Thu Jul 04 15:10:00 IST 2019), (Sat Jun 30 23:37:00 IST 2018,Sun Jul 01 14:44:00 IST 2018), (Sat Jun 30 23:13:00 IST 2018,Sun Feb 28 23:34:00 IST 219), (Sat Jun 30 22:58:00 IST 2018,Mon Jul 01 18:22:00 IST 2019), (Sat Jun 30 22:36:00 IST 2018,Mon Jul 01 16:01:00 IST 2019), (Sat Jun 30 21:53:00 IST 2018,Tue Jul 02 10:36:00 IST 2019), (Sat Jun 30 21:42:00 IST 2018,Sun Jun 30 23:25:00 IST 2019), (Sat Jun 30 21:36:00 IST 2018,Mon Jul 01 16:47:00 IST 2019), (Sat Jun 30 21:16:00 IST 2018,Mon Jul 01 18:18:00 IST 2019), (Sat Jun 30 21:10:00 IST 2018,Thu Jul 04 12:25:00 IST 2019), (Sat Jun 30 21:02:00 IST 2018,Sat Dec 01 17:29:00 IST 2018), (Sat Jun 30 20:54:00 IST 2018,Mon Jul 01 15:51:00 IST 2019), (Sat Jun 30 ...

Но как выполнить операцию, чтобы разница в датах, сгруппированных, давала значения в минутах.

У меня есть команда, она не дает желаемого результата, какие изменения следует внести?

val time_diff = dates.map(x => (x._2.getTime()-x._1.getTime())/(60*1000)%60)

что такое (60*1000)%60) значения представляют?

2 ответа

Решение

getTime дает миллисекунды, поэтому деление на 1000.0 дает секунды, а деление на 1000.0*60 дает минуты. Помните, что деление Long по Int дает вам еще один Long, поэтому вы усекаете полученные минуты до следующего младшего целого числа. Добавление модуля 60, % 60просто оборачивает минуты до 0-59, поэтому, если бы у вас была разница в 90 минут, это было бы 1 час 30 минут, а результат вашего вычисления был бы просто 30.

val t = System.currentTimeMillis
val x = new java.util.Date(t)
val y = new java.util.Date(t + 10000) // ten seconds later
(y.getTime - x.getTime) / (1000.0 * 60) // 0.167
(y.getTime - x.getTime) / (1000   * 60) // 0 !

Первая проблема, когда вы вычитаете два раза, время может стать отрицательным. Во-вторых, getTime возвращает значение в миллисекундах.

1000ms = 1 second

Итак, сначала нужно разделить его на 1000, чтобы получить время в секундах. Чтобы получить в минутах, разделите его снова на 60. Поскольку вам требуется результат в минутах.

val time_diff = dates.map(x => (x._2.getTime()-x._1.getTime())/(60*1000))
Другие вопросы по тегам