Excel输入java日期



我有一个excel表格,其中一个单元格包含1920年9月4日的日期值,我想解析并使用到我的应用程序中。从excel表中提取它可以正常工作,但它不能正确转换日期。有趣的是,当我从excel表中提取包含datevalue的单元格时,它不会返回dateformat或任何东西,而是返回一个双值。

我需要把这个双值(7552.0)转换成一个有效的Date对象,但我似乎不能正确地做到这一点,这是我到目前为止最接近的:

new SimpleDateFormat("D").parse(getDateFromExcelAsString())

getDateFromExcelAsString()方法将双精度转换为字符串:

String.valueOf(dateAsDouble.intValue())

问题是该方法将7552.0双精度值转换为日期:1990年9月4日。但这应该是1920年9月3日

问题是您使用了不同的引用。对于excel,第0天是1899年12月31日,而对于Date类,第0天是1970年1月1日,这导致了70年的偏差。

我已经测试了一个简单而丑陋的解决方案,如:

double value = 7552;
Date date = new Date(0);
Calendar cal = new GregorianCalendar();
cal.setTime(date);
cal.add(Calendar.DATE, (int) value - 25569);
System.out.println(new SimpleDateFormat("d MMMM yyyy").format(cal.getTime()));

控制台输出是预期的:

3 September 1920

编辑:由于在您的问题中,您使用SimpleDateFormat来解析excel值,因此我将在这里添加使用该方法(而不是日历)的快速而不干净的解决方案。

double value = 7552;
SimpleDateFormat inputFormat = new SimpleDateFormat("D");
Date date = inputFormat.parse("" + (value - 25568));
SimpleDateFormat outputFormat = new SimpleDateFormat("d MMMM yyyy");
System.out.println(outputFormat.format(date));

再次控制台输出为:

3 September 1920

请注意,现在的天偏移量是25568,因为SimpleDateFormat的第0天是31/Dec/1969。

相关内容

  • 没有找到相关文章

最新更新