gpt4 book ai didi

java - 将 Double 转换为 java.sql.Time

转载 作者:行者123 更新时间:2023-11-30 05:28:24 25 4
gpt4 key购买 nike

我正在从 Excel 文件中的单元格读取数据。我有 Double 形式的时间(毫秒)值,即 0.36712962962962964。

我需要将此值转换为 java.sql.Time 格式。我尝试使用各种方法解析它,但失败了。以下是代码。

timeInDouble = 0.36712962962962964;
时间 time = new Time(Long.parseLong(timeInDouble.toString()));

此代码的输出是:

java.lang.NumberFormatException:对于输入字符串:“0.36712962962962964”

这种转换的正确方法是什么?

最佳答案

tl;博士

现代解决方案使用java.timeLocalTime

将您的字符串输入转换为 double,作为一天的一小部分,乘以一天中的纳秒数(或者可能是毫秒数),然后添加到 00:00:00 时间-天。

LocalTime
.MIN
.plusNanos (
(long)
(
TimeUnit.HOURS.toNanos ( 24 )
*
Double.parseDouble ( "0.36712962962962964" )
)
)

08:48:40

java.time

java.sql.Time class 是一个可怕的 hack,假装是一天中的时间,但实际上是通过子类化 java.util.Date 来实现的。 永远不要使用此类。

随着 JSR 310 的采用,此类成为遗产,被 java.time.LocalTime 取代。类(class)。 LocalTime 真正代表一天中的时间,没有日期,也没有时区上下文或与 UTC 的偏移量。

我认为您的说法是正确的,Microsoft Excel 提供的这个十进制数代表一天 24 小时的一小部分。顺便说一句,这是表示一天中某个时间的糟糕方法。更好的方法是使用标准 ISO 8601 中的文本格式。

首先将您的输入解析为 double 原语。通常,为了准确性,我建议使用 BigDecimal 类,但我猜测 Excel 使用 floating-point technology来处理这个数字,所以我们也会这样做。

// Parse your input string as a `double`.
String input = "0.36712962962962964";
double fractionOf24Hours = Double.parseDouble ( input );

该输入可能代表一天 24 小时的一小部分。那么我们来计算一下一天有多少纳秒。我认为 Excel 使用毫秒而不是纳秒,但最终结果可能是相同的。

// Calculate the number of nanoseconds in a day.
long nanosIn24Hours = TimeUnit.HOURS.toNanos ( 24 );

我们用常量 LocalTime.MIN 来表示一天中的时间 00:00:00。添加代表我们所需的一天中的纳秒数。

// Start at time-of-day zero, adding the amount of time in nanos.
long nanosToAdd = ( long ) ( nanosIn24Hours * fractionOf24Hours );
LocalTime localTime = LocalTime.MIN.plusNanos ( nanosToAdd );

查看此code run live at IdeOne.com .

localTime.toString(): 08:48:40

转换

如果您必须拥有 java.sql.Time 对象才能与尚未更新为 java.time 的旧代码进行互操作,则可以来回转换。查看添加到旧类中的新方法。

java.sql.Time t = Time.valueOf( localTime ) ;

关于java - 将 Double 转换为 java.sql.Time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58044657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com