用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");
因gmtZone为final的,我们不能通过setTimeZone这种方法来改变时区,只能在JXL获取时间以后重新转成本地时间。
测试开始:
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;
importjxl.DateCell;
importjxl.Sheet;
importjxl.Workbook;
importjxl.read.biff.BiffException;
publicclass JXLTest {
publicstaticvoid 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-1016:00:00”,getDate得到的日期便是“Fri Sep 11 00:00:00 CST 2009”
* @author XHY
* @paramjxlDate 通过DateCell.getDate()获取的时间
* @return
* @throws ParseException
*/
publicstatic java.util.Date convertDate4JXL(java.util.Date jxlDate) throws ParseException{
if(jxlDate==null)
returnnull;
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);
}
}
输出结果是:
Get date by JXL:Sun Apr 11 08:00:00 CST 2010
After converting,we can get the time we had writed-->Sun Apr 11 00:00:00 CST 2010
相关推荐
在Java编程环境中,有时我们需要处理Excel文件,例如读取、修改或分析数据。"使用jxl读取Excel表格数据"这个主题就是关于如何利用jxl库来...通过熟练掌握jxl,你可以高效地在Java程序中与Excel数据交互,提升工作效率。
对于日期单元格,可以使用`DateCell`或`NumberCell`的特定方法来获取日期值。例如,对于日期单元格,可以转换为`java.util.Date`对象: ```java if (c instanceof DateCell) { DateCell dateCell = (DateCell) c; ...
**Java Excel API (jxl.jar) 最新版本详解与使用指南** Java Excel API,简称jxl,是一个开源的Java库,允许开发人员在Java应用程序中读取、写入和修改Excel电子表格。这个库非常实用,尤其对于需要处理大量数据并...
### JAVA操作Excel(jxl使用介绍) #### 一、概述 在Java编程中,处理Excel文件是一种常见的需求。jxl库是早期广泛使用的Java操作Excel文件的API之一。本篇文章将详细介绍如何利用jxl库实现对Excel文件的基本操作,...
JXL使用案例主要涉及如何利用该库的基本功能以及在处理Excel文件时,特别是日期和数字格式化时遇到的问题和解决方案。本知识点将围绕这些方面展开详细讨论。 首先,当我们使用JXL库读取Excel文件中的数据时,对于...
- 如果是`CellType.DATE`,表示日期单元格,可以转换为`DateCell`并调用`getDate()`方法获取日期对象。 示例代码如下: ```java String textValue = null; double numericValue = 0.00; Date dateValue = ...
- 使用`getCell().getType()`检查单元格类型,并根据类型进行强制类型转换,然后调用相应的方法获取具体值,例如`getString()`、`getValue()`或`getDate()`。 在操作完成后,确保释放资源,通过调用`Workbook.close...
值得注意的是,`getContents()`方法返回的是单元格的字符串形式,无论原始数据是文本、数字还是日期。如果需要保持原始类型,可以根据单元格的类型进行转换: ```java if (cell.getType() == CellType.LABEL) { ...
- `DateCell.getDate()` 方法用于获取日期类型的值。 #### 四、总结 Java Excel API是一个强大的工具,可以帮助Java开发者高效地处理Excel文件。通过以上介绍和示例,可以看出它不仅支持基本的读写操作,还提供了...
### Java 操作 Excel 的基础知识与实践 在 IT 领域中,经常需要处理各种格式的数据文件,Excel 文件因其在数据存储和展示方面的便捷性而被广泛使用。使用 Java 来操作 Excel 文件不仅可以提高工作效率,还能实现...
- `getContents()`方法可以获取单元格的内容,无论其原始类型为何,都会返回一个字符串。 3. **处理不同类型的单元格** - `getContents()`方法虽然方便,但会丢失原始类型信息。为保持类型,需要根据单元格的类型...
### 导入Excel数据到数据库:详细步骤与代码解析 #### 一、前言 在实际工作中,我们经常需要将Excel文件中的数据批量导入到数据库中。这种需求常见于数据迁移、数据分析等领域。本文将详细介绍如何使用Java Excel ...
每个`Sheet`对象包含多个单元格(`Cell`),可以通过`getCell`方法来获取指定位置的单元格。例如,要获取第一行第一列的单元格: ```java Cell c00 = sheet.getCell(0, 0); ``` 可以使用`getContents`方法来获取...
JExcelApi支持多种数据类型,包括文本、数字、日期等,并提供了便捷的方法来获取这些数据。 #### 三、环境准备 在开始之前,确保已经安装了Java环境,并且项目中已经添加了JExcelApi库。如果使用Maven项目,可以在`...
通过上述介绍,我们可以了解到Java处理Excel文件的基本流程,包括创建Workbook对象、获取工作表Sheet以及访问单元格Cell等关键步骤。在实际项目中,根据需求选择合适的库(如Apache POI或JXL),并熟练掌握其API的...
通过jxl库读取Excel文件,获取单元格数据,然后利用JDBC将数据保存到数据库,可以构建出强大的数据迁移和处理工具。在实际项目中,还可能需要考虑其他因素,比如数据验证、错误处理以及性能优化等,以确保程序的稳定...
- **日期型**:通过`DateCell`类获取日期。 示例代码如下: ```java Cell c00 = rs.getCell(0, 0); // 假设为文本型 Cell c10 = rs.getCell(1, 0); // 假设为数字型 Cell c11 = rs.getCell(1, 1); // 假设为日期型...
在Java编程中,处理Excel文件是一项常见的任务,特别是在数据处理、报表生成或数据分析等领域。Java Excel API (JExcelAPI) 是一个广泛使用的库,用于读取、创建和修改Microsoft Excel文件。在本篇中,我们将深入...
本文将详细讲解如何使用Java Excel API(jxl库)来读取和操作Excel文件,并将其与数据库交互。 首先,要从Excel文件读取数据表,我们需要引入jxl库。在Java代码中,可以通过以下方式导入必要的包: ```java import...