Временная отметка в микросекундах (длинная с точностью до микросекунд) - PullRequest
0 голосов
/ 21 марта 2019

Я уже смотрел на вопрос из здесь и его решения, но похоже, что решение пришло из 2013 года, и я ищу лучшее решение, чем это.

Как преобразовать DateTime (TimeStamp)) от Oracle до Long с точностью до микросекунд?

For.Например: Метка времени, поступающая из Oracle: «2018-10-31 14: 30: 12.123456».Мне нужно преобразовать его в Long: 1541010612123456.

I/P: "2018-10-31 14:30:12.123456" // String
O/P: 1541010612123456 // Long

Я пытался

java.sql.Timestamp.valueOf("2018-10-31 14:30:12.123456").getTime

Но это дает мне точность до миллисекунд: 1541010612123

Чтобы обойти этоЯ пробовал что-то вроде этого, которое работает, но не уверен, является ли это хорошим решением или нет.

val timeStamp = java.sql.Timestamp.valueOf("2018-10-31 14:30:12.123456").toInstant
val requiredLong = (timeStamp.getEpochSecond.toString + (timeStamp.getNano/1000).toString).toLong

Любое лучшее предложение или решение.

1 Ответ

1 голос
/ 21 марта 2019

Вы можете использовать TimeUnit для этого преобразования:

Instant instant = java.sql.Timestamp.valueOf("2018-10-31 14:30:12.123456").toInstant();  
long micros = TimeUnit.SECONDS.toMicros(instant.getEpochSecond()) + TimeUnit.NANOSECONDS.toMicros(instant.getNano());
...