有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

excel如何检查java 6中日期类型的双精度值

我试图解析单元格中有日期的excel工作表。但是,当我的代码解析时,它将日期转换为双精度,即4292143098,我必须将该双精度解析回日期,以便获得正确的输出。此外,我还必须维护与Java6兼容的代码。我使用的是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(双值)检查数字是否为日期类型,但它也考虑将其他双值作为日期,并且此检查不起作用。有人知道这件事吗?请帮忙


共 (2) 个答案

  1. # 1 楼答案

    它不是将日期转换为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值和原始单元格的格式。一种方法是修改方法的签名以添加“format”参数,并让调用方传递单元格格式

  2. # 2 楼答案

    Date date = DateUtil.getJavaDate(Double.parseDouble(formattedValue));
    String dateTime =  new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date);`