`

利用POI向EXCEL写入日期数据时的问题

阅读更多
发表于:2007-10-12 11:50:03 楼主
在网上看了很多资料都是讨论如何利用POI读EXCEL的,但是没看到几个用POI向EXCEL写入日期数据的贴子,好不容易使通了,但是碰到了两个新问题,希望各位大侠指点:

我向EXCEL写日期数据思路是先用JAVA函数把日期转换成相对1900-1-1 0:00的数字,然后利用POI自定义EXCEL单元格格式为YYYY-MM-DD HH:MM型,我测试了一下程序,这个方法基本上是行的通的,但是其中有两点问题:

1.JAVA日期转换函数的参考日期是1900-1-1 0:00而EXCEL的参考日期是1900-1-0 0:00,因此算出来的数值参了一,这是好处理的,但是EXCEL跟JAVA日期转换函数间的偏差却不只这一处,不知道EXCEL不知道还在哪里少算了一天的时间,大家告诉我为什么会出现这种好吗?我就怕是处理闰年的依据不一样,这样可能会导致后面的日期时间里再出现偏差。
2.JAVA日期转换函数对12点的识别有问题,会识别成0点,如:1994-01-01 12:00会识别成Sat Jan 01 00:00:00 CST 1994大家有碰到这种情况吗?

我的代码是这样的:
<%@ page contentType="text/html;charset=gb2312"% >
<%@ page import="java.io.*,java.lang.*,org.apache.poi.hssf.usermodel.*,org.apache.poi.hssf.usermodel.HSSFCell,org.apache.poi.hssf.usermodel.HSSFCellStyle,org.apache.poi.hssf.usermodel.HSSFDataFormat,org.apache.poi.hssf.usermodel.HSSFFont,org.apache.poi.hssf.usermodel.HSSFRow,org.apache.poi.hssf.usermodel.HSSFSheet,org.apache.poi.hssf.usermodel.HSSFWorkbook,org.apache.poi.hssf.usermodel.HSSFRow,org.apache.poi.hssf.util.HSSFColor" % >
<%@ page import="zs_bx.DataQuery"% >
<%@ page import="java.sql.*"% >
<%@ page import ="java.util.Date"% >
<%@ page import ="java.util.Locale"% >
<%@ page import ="java.text.*"% >
<%
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
HSSFCellStyle dateCellStyle=wb.createCellStyle();
short df=wb.createDataFormat().getFormat("yyyy-mm-dd hh:mm"); 
dateCellStyle.setDataFormat(df);

DateFormat format;
SimpleDateFormat datetemp = new SimpleDateFormat("yyyy-MM-dd hh:mm");
SimpleDateFormat datetemp_test=new SimpleDateFormat("yyyy-MM-dd");
Date temp1 = datetemp.parse("1900-01-01 00:00");
Date temp2=datetemp.parse("1994-01-01 12:00");
double numOfDateTime=0;
numOfDateTime=temp2.getTime()-temp1.getTime();
numOfDateTime=numOfDateTime/24/60/60/1000+1;

HSSFRow row;
HSSFCell cell;
row = sheet.createRow(0);

cell = row.createCell((short)0);
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cell.setCellValue(numOfDateTime); 
cell.setCellStyle(dateCellStyle);

....
....
 
 
问题点数:10 回复次数:5
 
发表于:2007-10-12 12:38:211楼 得分:0
可以试试先将日期以字符形式写入单元格再设定单元格格式?
 
 
发表于:2007-10-12 14:40:022楼 得分:0
这样不行的,这样做的话输进去了的数据就是字符型数据了,我之所以这么费周章用上面的方法去做就是应该这个方法不行啊,因为我在应用上必须让excel把日期能识别成日期,这样在画图表的时候才会根据时间画出正确的曲线

不过还是谢谢噢
 
 
发表于:2007-10-12 16:35:503楼 得分:0
看了JDK的API终于知道为什么出现这个问题了

SimpleDateFormat datetemp = new SimpleDateFormat("yyyy-MM-dd hh:mm");

在日期格式的定义中格式符是区分大小写的,H代表24小时(0~23),h代表12小时(1~12),所以之前我的12老是被认成是0时了(之前我在里面写的大小写是随意的),上面那句子正确的写法是

SimpleDateFormat datetemp = new SimpleDateFormat("yyyy-MM-DD HH:mm");

谢谢1楼的大哥了:)
 
 
发表于:2007-10-12 17:08:414楼 得分:0
对于第一个问题也查出原因了,这个问题挺有普遍意义的,实际上通常的所有应用里JAVA的Date.getTime()函数获得的时间都会比EXCEL里大,其原因如下:

1.EXCEL的时间参考是1900-1-0 0:00 为1,而java的时间参考是以1900-1-1 0:00 为0,因此java的时间转换出的数值比excel的少1,所以这里要加1;
2.由于EXCEL误以为1900年是闰年(真正的判断法则是:能被4或400整除,但不能被100整除的年份为闰年),所以在这个问题上EXCEL又把天数算多了一天,因此,用JAVA算出来的时间要转化成EXCEL的话要再加多一天,因此是加2

对于闰年的判断我不知道EXCEL是不是只错了1900年,反正从1900到2007EXCEL就错了一回,其它的闰年都算对了,希望这个发现能对各位大侠有帮助吧^_^
 
 
发表于:2007-10-12 17:14:395楼 得分:0
向excel中写入日期数据其实就是写入一个数值。
计算出来添进去,把格式设成日期型就OK了
分享到:
评论

相关推荐

    利用POI解析excel并存入数据库demo

    在这个"利用POI解析excel并存入数据库demo"中,我们将关注如何使用 POI 库来读取 Excel 文件,并将数据有效地存入 MySQL 数据库。 首先,要开始使用 POI,你需要在你的项目中引入相应的依赖。如果你使用的是 Maven...

    java利用poi操作excel所需要的jar包

    在标题和描述中提到的"java利用poi操作excel所需要的jar包"是POI项目的核心依赖,包括以下几个部分: 1. **poi-3.14.jar**: 这是Apache POI的主要库,提供了对低级HSSF(Horrible Spreadsheet Format)的支持,用于...

    java poi处理excel数据

    通过以上知识点的学习和实践,你将能够熟练地利用Java POI进行Excel数据的处理,无论是数据导入导出、报表生成还是数据分析,都将变得游刃有余。记得在使用过程中,不断查阅文档、参考示例,结合实际项目进行练习,...

    Java利用POI实现数据Excel导出实例源码

    本实例源码着重讲解如何利用Apache POI来实现数据的Excel导出功能。 首先,我们需要了解Apache POI的基本概念。POI提供了HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet Format)两个主要的API,分别...

    poi生成excel表格

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel。...通过这些示例,你可以理解如何在Java应用中利用POI进行Excel文件的创建、读取和修改,以及如何结合数据库操作实现数据的导入导出。

    java利用poi生成excel报表、处理word文档

    同时,处理大量数据时,分批写入或读取可以避免一次性加载所有数据导致的内存溢出问题。 总结,Java POI库为开发者提供了一种高效、灵活的方式来处理Excel报表和Word文档,无论是在生成报表还是数据导入导出、文档...

    使用poi根据导入模板生成excel

    在本项目中,“使用poi根据导入模板生成excel”是核心任务,这意味着我们需要利用POI库处理已有的Excel模板,生成新的Excel表格,并填充数据。 首先,我们需要了解Apache POI的基本结构和使用方法。POI提供了HSSF...

    基于POI的Excel多Sheet页导出导入工具类

    6. **性能优化**:Apache POI库本身在处理大量数据时可能存在性能问题,这个工具类可能会通过一些优化策略,如内存管理、流式写入等,来改善处理大型Excel文件的效率。 在实际应用中,这个工具类可以广泛应用于数据...

    POI导出Excel表格

    在这个“POI导出Excel表格”的实例中,我们将深入探讨如何利用Apache POI进行Excel文件的导入与导出操作。 首先,我们需要在项目中集成Apache POI库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```...

    POI解析excel并存入mysqlのdemo

    这个“POI解析excel并存入mysqlのdemo”是利用 Java 的 Apache POI 库来读取 Excel 数据,并将这些数据存储到 MySQL 数据库中的示例。下面我们将详细探讨相关的知识点。 1. **Apache POI**: Apache POI 是一个...

    POI操作Excel的封装

    在Java世界中,Apache POI库是一个非常强大的工具,它允许开发者读取、写入以及修改Microsoft Office格式的文件,包括Excel(XLS和XLSX)、Word(DOC和DOCX)以及PowerPoint(PPT和PPTX)。在这个场景中,"POI操作...

    java利用poi生成excel demo

    在"java利用poi生成excel demo"中,我们关注的是如何生成Excel文件。为了实现这个功能,你需要在项目中引入Apache POI的相关jar包。这些jar包通常包括poi-ooxml、poi-ooxml-schemas和poi-ooxml-lite等,它们提供了...

    java利用POI技术上传&导出Excel表格并保存数据至数据库

    本篇文章将深入探讨如何利用POI技术在Java中实现Excel的上传、导出以及将数据保存至数据库。 首先,我们需要了解Apache POI的基本用法。POI提供了HSSF(用于.xls文件)和XSSF(用于.xlsx文件)API,它们允许我们...

    POI读取Excel带格式数据

    标题 "POI读取Excel带格式数据" 涉及到的是Apache POI库在Java中的使用,这个库允许开发者处理Microsoft Office格式的文件,包括Excel。Apache POI是一个开源项目,提供了API来读取、写入和修改Excel文档。在本场景...

    poi读取excel文件

    在Java编程环境中,Apache POI库是一个非常重要的工具,它允许开发者读取、写入以及修改...总的来说,Apache POI是Java处理Excel文件的强大工具,通过合理利用提供的库和源码示例,可以有效地读取和操作Excel数据。

    使用poi生成Excel所需要的jar包

    在这个场景中,"使用poi生成Excel所需要的jar包"指的是利用Apache POI库来生成Excel文件。POI-3.9.jar是Apache POI项目的一个版本,包含了所有必要的类和方法,让我们可以处理Excel的XLS和XLSX格式。 首先,Apache ...

    poi解析excel

    【描述】中的"一个简单的java工程,利用poi解析excel.下载代码直接可以运行"指的是一个实际的Java项目实例,该实例使用了Apache POI库来解析Excel文件。这个工程可能包含了读取Excel数据、分析工作表结构、处理...

    poi操作excel表格导入和导出

    在“poi操作excel表格导入和导出”这个主题中,我们将深入探讨如何利用Apache POI进行Excel数据的处理,包括导入和导出。 一、Apache POI简介 Apache POI是一个开源项目,它提供了API来处理Microsoft Office格式的...

    poi导入导出Excel源码

    标题“poi导入导出Excel源码”和描述涉及到的核心知识点是利用Apache POI进行Excel文件的导入与导出操作。 首先,让我们详细了解Apache POI库。Apache POI是Apache软件基金会的一个开源项目,其主要目标是创建Java ...

    POI实现excel导入导出

    在本文中,我们将深入探讨如何使用Apache POI库实现Excel的导入和导出功能,这对于处理大量数据和自动化办公流程非常有用。 首先,让我们了解一下Apache POI的核心组件HSSF(Horrible Spreadsheet Format)和XSSF...

Global site tag (gtag.js) - Google Analytics