`

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

    博客分类:
  • Java
阅读更多
这种问题产生的原因是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;
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);
    }
}


输出结果是:

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
分享到:
评论

相关推荐

    使用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...

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

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

    java操作excel

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

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

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

    导入Excel数据到数据库

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

    java读写excel[参考].pdf

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

    java读取excel文件

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

    利用Java Excel API操作Excel

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

    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); // 假设为日期型...

    java读写excel的操作文档

    首先,要进行Java读写Excel的操作,你需要在项目中引入`jxl.jar`库。这个库包含了所有处理Excel文件所需的功能。一旦引入,你可以开始编写代码来操作Excel文件。 **读取Excel文件:** 1. 使用`Workbook....

    java导出excel小实例

    这段示例代码展示了如何从Excel文件中读取数据,并且演示了如何根据单元格的不同类型获取其具体值。此外,通过类型检查,还可以更加精确地处理单元格内容,例如分别获取文本、数字或日期类型的值。 以上就是Java...

Global site tag (gtag.js) - Google Analytics