`

【转】JXL获取Excel单元格的日期(DateCell.getDate)与实际填写日期相差8小时的解决方法

    博客分类:
  • Java
阅读更多
用JXL获取的时间总是比Excel单元格实际填写的时间早八小时,例如
单元格中日期为“2009-9-10″,getDate得到的日期是“Thu Sep 10 08:00:00 CST 2009″;
单元格中日期为“2009-9-10 16:00:00″,getDate 得到的日期便是“Fri Sep 11 00:00:00 CST 2009″;

这种问题产生的原因 是JXL按照GMT时间来解析Excel单元格的时间,它始终认为被解析的单元格填写的时间 为格林威治时间,然后我们在本地getDate的时候会将格林威治时间转成本地时间,因此会相差8小时。
详见:jxl.read.biff.DateRecord.java类
private static final TimeZone gmtZone = TimeZone.getTimeZone("GMT");

1、首先在D盘建立一个xls表(tests.xls),在A1单元格随便填写一个日期,例如2010-4-11 0:00:00
2、测试类:
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.TimeZone;
import jxl.DateCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
 
public class JXLTest {
	public static void main(String[] args) throws BiffException, IOException,ParseException {
		Workbook workBook = Workbook.getWorkbook(new File("D:\\test.xls"));
		Sheet sheet = workBook.getSheet(0);
		DateCell cell = (DateCell) sheet.getCell(0, 0);
		System.out.println("Get date by JXL:" + cell.getDate());
		System.out.println("After converting,we can get the time we had writed-->"+ convertDate4JXL(cell.getDate()));
	}
 
	/**
	 * JXL中通过DateCell.getDate()获取单元格中的时间为(实际填写日期+8小时),原因是JXL是按照GMT时区来解析XML。
	 * 本方法用于获取单元格中实际填写的日期! 例如单元格中日期为“2009-9-10”,getDate得到的日期便是“Thu Sep 10 08:00:00 CST 2009”;
	 * 单元格中日期为“2009-9-10 16:00:00”,getDate得到的日期便是“Fri Sep 11 00:00:00 CST 2009”
	 * @author XHY
	 * @param jxlDate 通过DateCell.getDate()获取的时间
	 * @return
	 * @throws ParseException
	 */
	public static java.util.Date convertDate4JXL(java.util.Date jxlDate) throws ParseException {
		if (jxlDate == null)
			return null;
		TimeZone gmt = TimeZone.getTimeZone("GMT");
		DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.getDefault());
		dateFormat.setTimeZone(gmt);
		String str = dateFormat.format(jxlDate);
		TimeZone local = TimeZone.getDefault();
		dateFormat.setTimeZone(local);
		return dateFormat.parse(str);
	}
}
分享到:
评论
2 楼 tsinglongwu 2012-05-07  
顶,解决了获取Date单元格的内容问题,原来要转换成
DateCell cell = (DateCell) sheet.getCell(0, 0);
谢了
1 楼 alexyao8 2012-03-28  
威武,今天刚遇到这个问题

相关推荐

    使用jxl读取Excel表格数据

    在Java编程环境中,有时我们需要处理Excel文件,例如读取、修改或分析数据。"使用jxl读取Excel表格数据"这个主题就是关于如何利用jxl库来...通过熟练掌握jxl,你可以高效地在Java程序中与Excel数据交互,提升工作效率。

    jxl导入完整可用[文].pdf

    对于日期单元格,可以使用`DateCell`或`NumberCell`的特定方法来获取日期值。例如,对于日期单元格,可以转换为`java.util.Date`对象: ```java if (c instanceof DateCell) { DateCell dateCell = (DateCell) c; ...

    jxl.jar最新版本+使用说明+例子

    **Java Excel API (jxl.jar) 最新版本详解与使用指南** Java Excel API,简称jxl,是一个开源的Java库,允许开发人员在Java应用程序中读取、写入和修改Excel电子表格。这个库非常实用,尤其对于需要处理大量数据并...

    JAVA操作Excel(jxl使用介绍).pdf

    ### JAVA操作Excel(jxl使用介绍) #### 一、概述 在Java编程中,处理Excel文件是一种常见的需求。jxl库是早期广泛使用的Java操作Excel文件的API之一。本篇文章将详细介绍如何利用jxl库实现对Excel文件的基本操作,...

    JXL使用案例

    JXL使用案例主要涉及如何利用该库的基本功能以及在处理Excel文件时,特别是日期和数字格式化时遇到的问题和解决方案。本知识点将围绕这些方面展开详细讨论。 首先,当我们使用JXL库读取Excel文件中的数据时,对于...

    1 从 Excel 文件读取数据表.docx

    - 如果是`CellType.DATE`,表示日期单元格,可以转换为`DateCell`并调用`getDate()`方法获取日期对象。 示例代码如下: ```java String textValue = null; double numericValue = 0.00; Date dateValue = ...

    Java_Excel_API学习.pdf

    - 使用`getCell().getType()`检查单元格类型,并根据类型进行强制类型转换,然后调用相应的方法获取具体值,例如`getString()`、`getValue()`或`getDate()`。 在操作完成后,确保释放资源,通过调用`Workbook.close...

    1 从 Excel 文件读取数据表.pdf

    值得注意的是,`getContents()`方法返回的是单元格的字符串形式,无论原始数据是文本、数字还是日期。如果需要保持原始类型,可以根据单元格的类型进行转换: ```java if (cell.getType() == CellType.LABEL) { ...

    java_对excel_的操作源码(有备无患)

    - `DateCell.getDate()` 方法用于获取日期类型的值。 #### 四、总结 Java Excel API是一个强大的工具,可以帮助Java开发者高效地处理Excel文件。通过以上介绍和示例,可以看出它不仅支持基本的读写操作,还提供了...

    java操作excel

    ### Java 操作 Excel 的基础知识与实践 在 IT 领域中,经常需要处理各种格式的数据文件,Excel 文件因其在数据存储和展示方面的便捷性而被广泛使用。使用 Java 来操作 Excel 文件不仅可以提高工作效率,还能实现...

    java读写excel[参考].pdf

    - `getContents()`方法可以获取单元格的内容,无论其原始类型为何,都会返回一个字符串。 3. **处理不同类型的单元格** - `getContents()`方法虽然方便,但会丢失原始类型信息。为保持类型,需要根据单元格的类型...

    导入Excel数据到数据库

    ### 导入Excel数据到数据库:详细步骤与代码解析 #### 一、前言 在实际工作中,我们经常需要将Excel文件中的数据批量导入到数据库中。这种需求常见于数据迁移、数据分析等领域。本文将详细介绍如何使用Java Excel ...

    利用Java Excel API操作Excel

    每个`Sheet`对象包含多个单元格(`Cell`),可以通过`getCell`方法来获取指定位置的单元格。例如,要获取第一行第一列的单元格: ```java Cell c00 = sheet.getCell(0, 0); ``` 可以使用`getContents`方法来获取...

    java读取excel文件

    JExcelApi支持多种数据类型,包括文本、数字、日期等,并提供了便捷的方法来获取这些数据。 #### 三、环境准备 在开始之前,确保已经安装了Java环境,并且项目中已经添加了JExcelApi库。如果使用Maven项目,可以在`...

    java中Excel导入数据库

    通过jxl库读取Excel文件,获取单元格数据,然后利用JDBC将数据保存到数据库,可以构建出强大的数据迁移和处理工具。在实际项目中,还可能需要考虑其他因素,比如数据验证、错误处理以及性能优化等,以确保程序的稳定...

    java excel处理

    通过上述介绍,我们可以了解到Java处理Excel文件的基本流程,包括创建Workbook对象、获取工作表Sheet以及访问单元格Cell等关键步骤。在实际项目中,根据需求选择合适的库(如Apache POI或JXL),并熟练掌握其API的...

    java Excel导入导出

    - **日期型**:通过`DateCell`类获取日期。 示例代码如下: ```java Cell c00 = rs.getCell(0, 0); // 假设为文本型 Cell c10 = rs.getCell(1, 0); // 假设为数字型 Cell c11 = rs.getCell(1, 1); // 假设为日期型...

    jsp和excel的数据交换[参考].pdf

    通过深入研究jxl API,作者发现`DateCell`类,它提供了一个`getDate()`方法,可以获取单元格中的日期对象。但这个日期对象是格林尼治标准时间(GMT),需要进行适当的转换以适应本地时间。 3. **导出数据到Excel**...

    java读写excel的操作文档

    在Java编程中,处理Excel文件是一项常见的任务,特别是在数据处理、报表生成或数据分析等领域。Java Excel API (JExcelAPI) 是一个广泛使用的库,用于读取、创建和修改Microsoft Excel文件。在本篇中,我们将深入...

Global site tag (gtag.js) - Google Analytics