Моя проблема верхнего уровня заключается в том, чтобы взять некоторые значения времени, которые я получаю из потока, как 64-разрядные наносекундные Unix-времена, в Scala, используя nscala_time (которому требуется миллисекунды --- должно быть достаточно просто) , Ударя некоторые проблемы с этим, я начал экспериментировать и обнаружил, что он легко конвертирует Long в Int, и я не могу понять правила для этого. Получив число, которое я могу передать nscala_time, я обнаружил, что номер, который я выбрал, не конвертируется в действительную строку даты.длинные целые числа и nscala_time
Мой код выглядит следующим образом:
val constructedTimeOne:Long = (((((((3) * 24) + 12) * 60) + 34) * 60 + 56) * 1000)
val constructedDateOne = new DateTime(constructedTimeOne)
val constructedStringOne = constructedDateOne.toString("YYYY-MM-DD HH:MM:SS")
println(s"constructedTime $constructedTimeOne converts to $constructedStringOne")
val constructedTimeTwo:Long = constructedTimeOne + (31 * 24 * 60 * 60 * 1000).asInstanceOf[Long]
val constructedDateTwo = new DateTime(constructedTimeTwo)
val constructedStringTwo = constructedDateTwo.toString("YYYY-MM-DD HH:MM:SS")
println(s"constructedTime $constructedTimeTwo converts to $constructedStringTwo")
val constructedTimeThree:Long = (constructedTimeOne + (31.asInstanceOf[Long] * 24 * 60 * 60 * 1000))
val constructedDateThree = new DateTime(constructedTimeThree)
val constructedStringThree = constructedDateThree.toString("YYYY-MM-DD HH:MM:SS")
println(s"constructedTime $constructedTimeThree converts to $constructedStringThree")
и когда я запускаю его, я получаю этот выход:
constructedTime 304496000 converts to 1970-01-04 13:01:00
constructedTime -1312071296 converts to 1969-12-350 20:12:70
constructedTime 2982896000 converts to 1970-02-35 13:02:00
Может кто-нибудь объяснить правила для сохранения значения Long? Я могу перенести «asInstanceOf» на любой из членов умножения в третьем разделе, и он работает нормально, но его размещение за пределами этого выражения в скобках (как во втором разделе) не работает.
А также, конечно, результат преобразования любого числа (интервалов времени, миллисекунды в этом случае) на дату и время должен выдавать действительную дату и время, так что я сделал неправильно, что дало дату 1970- 02-35?
Благодаря использованию 1000000L в качестве коэффициента преобразования от наносекунд до миллисекунд оказалось достаточно, чтобы исправить исходную проблему. – HillWithSmallFields