java.sql.Timestamp到微秒(精确到微秒)

java.sql.Timestamp到微秒(精确到微秒),java,sql,scala,jdbc,timestamp,Java,Sql,Scala,Jdbc,Timestamp,我已经研究了来自的问题及其解决方案,但看起来解决方案来自2013年,我正在寻找比这更好的解决方案 如何将DateTime(时间戳)从Oracle转换为Long,精确到微秒 用于。e、 g: 来自Oracle的时间戳是:“2018-10-31 14:30:12.123456”。我需要它将其转换为Long:1541010612123456 I/P: "2018-10-31 14:30:12.123456" // String O/P: 1541010612123456 // Long 我试过了 j

我已经研究了来自的问题及其解决方案,但看起来解决方案来自2013年,我正在寻找比这更好的解决方案

如何将DateTime(时间戳)从Oracle转换为Long,精确到微秒

用于。e、 g: 来自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

任何更好的建议或解决方案。

您可以使用时间单位进行此转换:

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());

您可以使用时间单位进行此转换:

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());

考虑使用<代码> LoalDATeTime<代码>代替<代码>时间戳<代码>。是的,我会这样做。如果你能从Oracle中检索<代码> OffStaseDeTime</代码>、<代码>即时< /代码>或<代码> LoalDATeTime</C> >,并完全避免过时和混淆的<代码>时间戳类。使用JDBC 4.2兼容的驱动程序应该是可能的。考虑使用<代码> LoalDATeTime< /Cord>而不是<代码>时间戳<代码>。是的,我将这样做。如果您能检索<代码> OffStestDATE TIME/<代码>,那就更好了。Oracle提供的
即时
LocalDateTime
,完全避免过时和混乱的
时间戳
类。使用符合JDBC 4.2的驱动程序应该是可能的。如果您无法避免
Timestamp
类(以及随之而来的时区故障风险),这绝对是一个好的解决方案。它清晰易读,避免了精度损失。如果您无法避免
Timestamp
类(以及随之而来的时区故障风险),这绝对是一个好的解决方案。它清晰易读,避免了精度损失。