gpt4 book ai didi

java - 如何在 java 6 中检查 double 值是否为 Date 类型

转载 作者:行者123 更新时间:2023-11-30 06:17:20 24 4
gpt4 key购买 nike

我正在尝试解析单元格中包含日期的 Excel 工作表。但是当我的代码解析时,它将日期转换为 double ,即 42921,43098 ,我必须将该 double 解析回日期,以便我可以获得正确的输出。此外,我必须维护仅与 java 6 兼容的代码。我使用的是 poi 3.6。所以我尝试过的如下,

private String formatDoubleNumberToString(double number) {
String formattedNumber = NumberToTextConverter.toText(number);


// replace E notation format
if (formattedNumber.contains("E")) {
formattedNumber = String.format("%." + DECIMAL_PLACES + "f", number);
formattedNumber = formattedNumber.indexOf(DECIMAL_SEPARATOR) < 0 ? formattedNumber
: formattedNumber.replaceAll("0*$", "").replaceAll("\\" + DECIMAL_SEPARATOR + "$", "");
}
else if(DateUtil.isValidExcelDate(double number)){ //here i am trying to check the double is of type Date

// convert the date using simpleDateFormat

}

return formattedNumber;
}

我正在尝试使用 isValidExcelDate(double value) 检查数字是否为日期类型,但它也将其他双值视为日期,并且此检查不起作用。有人对此有任何想法吗?请帮忙。

最佳答案

这不是“将日期转换为 double 日期”。

Excel 中的日期本身存储为 double 值,即自 1899 年 12 月 31 日(或 Excel 称之为 1900 年 1 月 0 日)以来的天数。一天中的时间被编码为小数部分。

如果要以字符串形式访问日期,请读取单元格的字符串值,而不是数值。但随后您将获得按用户指定的格式设置的值,这可能是多种不同的格式。

//here i am trying to check the double is of type Date

所有正 double 值都是“有效日期”,因为 Excel 会将它们转换为基于自 Excel 的“纪元”(起始点)以来的天数的日期。以下是一些示例:

  Number    Date
-------- ------------
0 1/0/1900
365 12/30/1900
10000 5/18/1927
100000 10/14/2173
1000000 11/26/4637
10000000 ############

因此,从 1900 年开始的 100 万天是有效的,但 1000 万天超出了范围。另请注意,Excel 无法处理负值日期值,即“1900 年 1 月 0 日”之前的日期值。

至于您正在查看的单元格是否包含日期,除了检查单元格的存储格式之外,您无法真正确定。如果单元格的格式为“日期”,则用户可能希望该值为日期,但这并不是 100% 确定。要回答所提出的问题,您无法检查 double 值并判断它是否是日期。

代码中的方法只有一个 double 参数,因此它无法确定源单元格的原始格式。您需要访问 double 值和原始单元格的格式。一种方法是修改方法的签名以添加“格式”参数,并让调用者传递单元格格式。

关于java - 如何在 java 6 中检查 double 值是否为 Date 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48942637/

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