Browse Source

add instant converter

delegate from localDatetime
pull/3214/head
gongxuanzhang 2 years ago
parent
commit
aa302be1c8
  1. 21
      easyexcel-core/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java
  2. 38
      easyexcel-core/src/main/java/com/alibaba/excel/converters/instant/InstantDateConverter.java
  3. 53
      easyexcel-core/src/main/java/com/alibaba/excel/converters/instant/InstantNumberConverter.java
  4. 53
      easyexcel-core/src/main/java/com/alibaba/excel/converters/instant/InstantStringConverter.java
  5. 1
      easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataListener.java
  6. 2
      easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataTest.java
  7. 3
      easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterReadData.java
  8. 5
      easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterWriteData.java
  9. 4
      easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestUtil.java

21
easyexcel-core/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java

@ -28,14 +28,17 @@ import com.alibaba.excel.converters.floatconverter.FloatBooleanConverter;
import com.alibaba.excel.converters.floatconverter.FloatNumberConverter;
import com.alibaba.excel.converters.floatconverter.FloatStringConverter;
import com.alibaba.excel.converters.inputstream.InputStreamImageConverter;
import com.alibaba.excel.converters.instant.InstantDateConverter;
import com.alibaba.excel.converters.instant.InstantNumberConverter;
import com.alibaba.excel.converters.instant.InstantStringConverter;
import com.alibaba.excel.converters.integer.IntegerBooleanConverter;
import com.alibaba.excel.converters.integer.IntegerNumberConverter;
import com.alibaba.excel.converters.integer.IntegerStringConverter;
import com.alibaba.excel.converters.localdate.LocalDateDateConverter;
import com.alibaba.excel.converters.localdate.LocalDateNumberConverter;
import com.alibaba.excel.converters.localdate.LocalDateStringConverter;
import com.alibaba.excel.converters.localdatetime.LocalDateTimeNumberConverter;
import com.alibaba.excel.converters.localdatetime.LocalDateTimeDateConverter;
import com.alibaba.excel.converters.localdatetime.LocalDateTimeNumberConverter;
import com.alibaba.excel.converters.localdatetime.LocalDateTimeStringConverter;
import com.alibaba.excel.converters.longconverter.LongBooleanConverter;
import com.alibaba.excel.converters.longconverter.LongNumberConverter;
@ -88,8 +91,12 @@ public class DefaultConverterLoader {
putAllConverter(new LocalDateNumberConverter());
putAllConverter(new LocalDateStringConverter());
putAllConverter(new LocalDateTimeNumberConverter());
putAllConverter(new LocalDateTimeStringConverter());
LocalDateTimeNumberConverter localDateTimeNumberConverter = new LocalDateTimeNumberConverter();
putAllConverter(localDateTimeNumberConverter);
putAllConverter(new InstantNumberConverter(localDateTimeNumberConverter));
LocalDateTimeStringConverter localDateTimeStringConverter = new LocalDateTimeStringConverter();
putAllConverter(localDateTimeStringConverter);
putAllConverter(new InstantStringConverter(localDateTimeStringConverter));
putAllConverter(new DoubleBooleanConverter());
putAllConverter(new DoubleNumberConverter());
@ -124,7 +131,9 @@ public class DefaultConverterLoader {
putWriteConverter(new BooleanBooleanConverter());
putWriteConverter(new ByteNumberConverter());
putWriteConverter(new DateDateConverter());
putWriteConverter(new LocalDateTimeDateConverter());
LocalDateTimeDateConverter localDateTimeDateConverter = new LocalDateTimeDateConverter();
putWriteConverter(localDateTimeDateConverter);
putWriteConverter(new InstantDateConverter(localDateTimeDateConverter));
putWriteConverter(new LocalDateDateConverter());
putWriteConverter(new DoubleNumberConverter());
putWriteConverter(new FloatNumberConverter());
@ -145,7 +154,9 @@ public class DefaultConverterLoader {
putWriteStringConverter(new ByteStringConverter());
putWriteStringConverter(new DateStringConverter());
putWriteStringConverter(new LocalDateStringConverter());
putWriteStringConverter(new LocalDateTimeStringConverter());
LocalDateTimeStringConverter localDateTimeStringConverter = new LocalDateTimeStringConverter();
putWriteStringConverter(localDateTimeStringConverter);
putWriteStringConverter(new InstantStringConverter(localDateTimeStringConverter));
putWriteStringConverter(new DoubleStringConverter());
putWriteStringConverter(new FloatStringConverter());
putWriteStringConverter(new IntegerStringConverter());

38
easyexcel-core/src/main/java/com/alibaba/excel/converters/instant/InstantDateConverter.java

@ -0,0 +1,38 @@
package com.alibaba.excel.converters.instant;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.converters.localdatetime.LocalDateTimeDateConverter;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
/**
* Instant and date converter
* delegate LocalDateTimeDateConverter
*
* @author gongxuanzhang
*/
public class InstantDateConverter implements Converter<Instant> {
private final LocalDateTimeDateConverter delegate;
public InstantDateConverter(LocalDateTimeDateConverter delegate) {
this.delegate = delegate;
}
@Override
public Class<?> supportJavaTypeKey() {
return Instant.class;
}
@Override
public WriteCellData<?> convertToExcelData(Instant value, ExcelContentProperty contentProperty,
GlobalConfiguration globalConfiguration) throws Exception {
LocalDateTime delegateTime = LocalDateTime.ofInstant(value, ZoneId.systemDefault());
return delegate.convertToExcelData(delegateTime, contentProperty, globalConfiguration);
}
}

53
easyexcel-core/src/main/java/com/alibaba/excel/converters/instant/InstantNumberConverter.java

@ -0,0 +1,53 @@
package com.alibaba.excel.converters.instant;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.converters.localdatetime.LocalDateTimeNumberConverter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
/**
* instant and number converter
* decorate LocalDateTimeNumber
*
* @author gongxuanzhangmelt@gmail.com
*/
public class InstantNumberConverter implements Converter<Instant> {
private final LocalDateTimeNumberConverter delegateConverter;
public InstantNumberConverter(LocalDateTimeNumberConverter delegateConverter) {
this.delegateConverter = delegateConverter;
}
@Override
public Class<?> supportJavaTypeKey() {
return Instant.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.NUMBER;
}
@Override
public Instant convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty,
GlobalConfiguration globalConfiguration) {
LocalDateTime localDateTime = delegateConverter.convertToJavaData(cellData, contentProperty,
globalConfiguration);
return localDateTime.atZone(ZoneId.systemDefault()).toInstant();
}
@Override
public WriteCellData<?> convertToExcelData(Instant value, ExcelContentProperty contentProperty,
GlobalConfiguration globalConfiguration) {
LocalDateTime delegateTime = LocalDateTime.ofInstant(value, ZoneId.systemDefault());
return delegateConverter.convertToExcelData(delegateTime, contentProperty, globalConfiguration);
}
}

53
easyexcel-core/src/main/java/com/alibaba/excel/converters/instant/InstantStringConverter.java

@ -0,0 +1,53 @@
package com.alibaba.excel.converters.instant;
import java.text.ParseException;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.converters.localdatetime.LocalDateTimeStringConverter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
/**
* Instant and string converter
* delegate LocalDateTimeStringConverter
*
* @author gongxuanzhang
*/
public class InstantStringConverter implements Converter<Instant> {
private final LocalDateTimeStringConverter delegate;
public InstantStringConverter(LocalDateTimeStringConverter localDateTimeStringConverter) {
delegate = localDateTimeStringConverter;
}
@Override
public Class<?> supportJavaTypeKey() {
return Instant.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public Instant convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty,
GlobalConfiguration globalConfiguration) throws ParseException {
LocalDateTime localDateTime = delegate.convertToJavaData(cellData, contentProperty, globalConfiguration);
return localDateTime.atZone(ZoneId.systemDefault()).toInstant();
}
@Override
public WriteCellData<?> convertToExcelData(Instant value, ExcelContentProperty contentProperty,
GlobalConfiguration globalConfiguration) {
LocalDateTime delegateTime = LocalDateTime.ofInstant(value, ZoneId.systemDefault());
return delegate.convertToExcelData(delegateTime, contentProperty, globalConfiguration);
}
}

1
easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataListener.java

@ -33,6 +33,7 @@ public class ConverterDataListener extends AnalysisEventListener<ConverterReadDa
Assertions.assertEquals(TestUtil.TEST_DATE, data.getDate());
Assertions.assertEquals(TestUtil.TEST_LOCAL_DATE, data.getLocalDate());
Assertions.assertEquals(TestUtil.TEST_LOCAL_DATE_TIME, data.getLocalDateTime());
Assertions.assertEquals(TestUtil.TEST_LOCAL_INSTANT, data.getInstant());
Assertions.assertEquals(data.getBooleanData(), Boolean.TRUE);
Assertions.assertEquals(data.getBigDecimal().doubleValue(), BigDecimal.ONE.doubleValue(), 0.0);
Assertions.assertEquals(data.getBigInteger().intValue(), BigInteger.ONE.intValue(), 0.0);

2
easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataTest.java

@ -55,6 +55,7 @@ public class ConverterDataTest {
}
private void readAndWrite(File file) throws Exception {
file = new File("aaa.xlsx");
EasyExcel.write(file, ConverterWriteData.class).sheet().doWrite(data());
EasyExcel.read(file, ConverterReadData.class, new ConverterDataListener()).sheet().doRead();
}
@ -115,6 +116,7 @@ public class ConverterDataTest {
converterWriteData.setDate(TestUtil.TEST_DATE);
converterWriteData.setLocalDate(TestUtil.TEST_LOCAL_DATE);
converterWriteData.setLocalDateTime(TestUtil.TEST_LOCAL_DATE_TIME);
converterWriteData.setInstant(TestUtil.TEST_LOCAL_INSTANT);
converterWriteData.setBooleanData(Boolean.TRUE);
converterWriteData.setBigDecimal(BigDecimal.ONE);
converterWriteData.setBigInteger(BigInteger.ONE);

3
easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterReadData.java

@ -2,6 +2,7 @@ package com.alibaba.easyexcel.test.core.converter;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
@ -26,6 +27,8 @@ public class ConverterReadData {
private LocalDate localDate;
@ExcelProperty("本地日期时间")
private LocalDateTime localDateTime;
@ExcelProperty("本地instant")
private Instant instant;
@ExcelProperty("布尔")
private Boolean booleanData;
@ExcelProperty("大数")

5
easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterWriteData.java

@ -2,10 +2,13 @@ package com.alibaba.easyexcel.test.core.converter;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.data.WriteCellData;
@ -26,6 +29,8 @@ public class ConverterWriteData {
private LocalDate localDate;
@ExcelProperty("本地日期时间")
private LocalDateTime localDateTime;
@ExcelProperty("本地instant")
private Instant instant;
@ExcelProperty("布尔")
private Boolean booleanData;
@ExcelProperty("大数")

4
easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestUtil.java

@ -1,8 +1,10 @@
package com.alibaba.easyexcel.test.util;
import java.text.ParseException;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;
import com.alibaba.excel.util.DateUtils;
@ -20,6 +22,8 @@ public class TestUtil {
public static final Date TEST_DATE;
public static final LocalDate TEST_LOCAL_DATE = LocalDate.of(2020, 1, 1);
public static final LocalDateTime TEST_LOCAL_DATE_TIME = LocalDateTime.of(2020, 1, 1, 1, 1, 1);
public static final Instant TEST_LOCAL_INSTANT =
TEST_LOCAL_DATE_TIME.atZone(ZoneOffset.systemDefault()).toInstant();
static {
try {

Loading…
Cancel
Save