最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用FastExcel導(dǎo)入支持多種時間格式

 更新時間:2024年12月17日 08:20:06   作者:VipSoft  
FastExcel 是一個采用純 java 開發(fā)的 excel 文件讀寫組件,支持 Excel'97(-2003)(BIFF8)文件格式,本文主要介紹了如何使用FastExcel導(dǎo)入支持多種時間格式,感興趣的可以了解

簡介

FastExcel 是一個采用純 java 開發(fā)的 excel 文件讀寫組件。支持 Excel'97(-2003)(BIFF8)文件格式。FastExcel 主要關(guān)注 excel 內(nèi)容的處理,所以 FastExcel 只能讀取單元格的字符 信息,而其它屬性如顏色,字體等就不支持了。由于不讀取,解析和存儲這些額外信息,因此 FastExcel 只需很小的內(nèi)存。

示例代碼:

public void testDump() throws ParserException, ReadException {
	Workbook workBook;
	workBook = FastExcel.createReadableWorkbook(new File("test.xls"));
	workBook.open();
	Sheet s;
	s = workBook.getSheet(0);
	System.out.println("SHEET:"+s);
	for (int i = s.getFirstRow(); i <= s.getLastRow(); i++) {
	System.out.print(i+"#");
	for (int j = s.getFirstColumn(); j <=s.getLastColumn(); j++) {
		System.out.print(","+s.getCell(i, j));
	}
	System.out.println();
	}
	workBook.close();
}

EasyExcel => FastExcel ,導(dǎo)入支持多種時間格式

InfoExcelDTO

/**
 * 合作開始日期*
 */
@ExcelProperty(index  = 22,converter = ExcelDateConverter.class)
private Date cooperationDate;

ExcelDateConverter

package com.vipsoft.base.util;

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;

import cn.idev.excel.converters.Converter;
import cn.idev.excel.enums.CellDataTypeEnum;
import cn.idev.excel.metadata.GlobalConfiguration;
import cn.idev.excel.metadata.data.ReadCellData;
import cn.idev.excel.metadata.property.ExcelContentProperty;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 日期格式轉(zhuǎn)換器
 */
public class ExcelDateConverter implements Converter<Date> {
    private static final Logger log = LoggerFactory.getLogger(ExcelDateConverter.class);
    // 定義所有要嘗試的日期格式
    SimpleDateFormat[] formats = {
            new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"),
            new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"),
            new SimpleDateFormat("yyyy/MM/dd"),
            new SimpleDateFormat("yyyy-MM-dd"),
            new SimpleDateFormat("yyyy/MM"),
            new SimpleDateFormat("yyyy/MM"),
            new SimpleDateFormat("yyyyMMdd")
    };

    @Override
    public Class<Date> supportJavaTypeKey() {
        return Date.class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }


    @Override
    public Date convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty,
                                  GlobalConfiguration globalConfiguration) throws Exception {
        String cellValue = "";
        if (cellData.getType().equals(CellDataTypeEnum.NUMBER)) {
            long cellIntValue = cellData.getNumberValue().longValue();
            if (cellIntValue > 19900100) {
                try {
                    // 1. 第一種解析,傳入的是數(shù)字形式的日期,形如yyyyMMdd
                    SimpleDateFormat originalFormat = new SimpleDateFormat("yyyyMMdd");
                    return originalFormat.parse(String.valueOf(cellIntValue));
                } catch (Exception e) {
                    log.warn("exception when parse numerical time with format yyyyMMdd");
                    cellValue=String.valueOf(cellIntValue);
                }
            }

            // 2. 第二種解析, excel是從1900年開始計算,最終通過計算與1900年間隔的天數(shù)計算目標日期
            LocalDate localDate = LocalDate.of(1900, 1, 1);

            //excel 有些奇怪的bug, 導(dǎo)致日期數(shù)差2
            localDate = localDate.plusDays(cellIntValue - 2);

            // 轉(zhuǎn)換為ZonedDateTime(如果需要時區(qū)信息)
            ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
            return Date.from(zonedDateTime.toInstant());
        } else if (cellData.getType().equals(CellDataTypeEnum.STRING)) {
            // 3. 第三種解析
            Date date = null;
            cellValue = cellData.getStringValue();
            for (SimpleDateFormat format : formats) {
                try {
                    date = format.parse(cellValue);
                    if (date != null) {
                        // 這一步是將日期格式化為Java期望的格式
                        return date;
                    }
                } catch (Exception e) {
                    // 如果有異常,捕捉異常后繼續(xù)解析
                    log.error(e.getMessage(), e);
                }
            }
        }
        // 如果有異常,捕捉異常后繼續(xù)解析
        throw new UnsupportedOperationException("The current operation is not supported by the current converter." + cellValue);
    }
 

    @Override
    public WriteCellData<?> convertToExcelData(Date value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String dateValue = sdf.format(value);
        return new WriteCellData<>(dateValue);
    }	
}

到此這篇關(guān)于Java使用FastExcel導(dǎo)入支持多種時間格式的文章就介紹到這了,更多相關(guān)Java FastExcel時間格式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go?Java算法之交錯字符串示例詳解

    Go?Java算法之交錯字符串示例詳解

    這篇文章主要為大家介紹了Go?Java算法之交錯字符串示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 詳解 Java 中 equals 和 == 的區(qū)別

    詳解 Java 中 equals 和 == 的區(qū)別

    這篇文章主要介紹了詳解 Java 中 equals 和 == 的區(qū)別的相關(guān)資料,equals 和 == 都是用來檢測兩個字符串是否相等,返回值也都是布爾型,但是兩者在內(nèi)部比較的處理中卻不盡相同需要的朋友可以參考下
    2017-03-03
  • Java中NullPointerException的異常解決

    Java中NullPointerException的異常解決

    本文解釋了Java中的NullPointerException是如何產(chǎn)生的,及使用Optional和Objects.requireNonNull()來避免此類異常的方法,感興趣的可以了解一下
    2025-12-12
  • 一文秒懂IDEA中每天都在用的Project Structure知識

    一文秒懂IDEA中每天都在用的Project Structure知識

    這篇文章主要介紹了一文秒懂IDEA中每天都在用的Project Structure知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • spring對JDBC和orm的支持實例詳解

    spring對JDBC和orm的支持實例詳解

    這篇文章主要介紹了spring對JDBC和orm的支持實例詳解,需要的朋友可以參考下
    2017-09-09
  • 解決mybatis-plus3.1.1版本使用lambda表達式查詢報錯的方法

    解決mybatis-plus3.1.1版本使用lambda表達式查詢報錯的方法

    這篇文章主要介紹了解決mybatis-plus3.1.1版本使用lambda表達式查詢報錯的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • java微信開發(fā)API第三步 微信獲取以及保存接口調(diào)用憑證

    java微信開發(fā)API第三步 微信獲取以及保存接口調(diào)用憑證

    這篇文章主要為大家詳細介紹了java微信開發(fā)API第二步,微信獲取以及保存接口調(diào)用憑證,感興趣的小伙伴們可以參考一下
    2016-06-06
  • java中如何截取字符串最后一位

    java中如何截取字符串最后一位

    這篇文章主要介紹了java中如何截取字符串最后一位的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • SpringBoot項目jar依賴問題報錯解析

    SpringBoot項目jar依賴問題報錯解析

    本文主要介紹了Spring Boot項目中常見的依賴錯誤類型、報錯內(nèi)容及解決方法,依賴沖突包括類找不到、方法找不到、類型轉(zhuǎn)換異常等,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • SpringBoot中的main方法注入service

    SpringBoot中的main方法注入service

    這篇文章主要介紹了SpringBoot中的main方法注入service操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評論

富阳市| 丽江市| 望城县| 余江县| 深水埗区| 巴南区| 东乡县| 竹北市| 丹江口市| 两当县| 宝丰县| 涪陵区| 上林县| 通渭县| 都江堰市| 福海县| 和平区| 二连浩特市| 林甸县| 法库县| 虹口区| 岱山县| 黑龙江省| 仁化县| 商河县| 洪泽县| 卓尼县| 宝丰县| 罗城| 吉隆县| 岳普湖县| 将乐县| 罗源县| 兴海县| 古丈县| 和田市| 南漳县| 思南县| 安溪县| 桂东县| 麟游县|