LocalTimeCellConverterFactory.java

  1. package com.gh.mygreen.xlsmapper.cellconverter.impl;

  2. import java.time.LocalDate;
  3. import java.time.LocalDateTime;
  4. import java.time.LocalTime;
  5. import java.time.ZoneId;
  6. import java.time.ZonedDateTime;
  7. import java.time.format.DateTimeFormatter;
  8. import java.time.format.DateTimeParseException;
  9. import java.util.Date;

  10. import com.gh.mygreen.xlsmapper.Configuration;
  11. import com.gh.mygreen.xlsmapper.cellconverter.CellConverter;
  12. import com.gh.mygreen.xlsmapper.fieldaccessor.FieldAccessor;

  13. /**
  14.  * {@link LocalTime}を処理する{@link CellConverter}を作成するためのファクトリクラス。
  15.  *
  16.  * @since 2.0
  17.  * @author T.TSUCHIE
  18.  *
  19.  */
  20. public class LocalTimeCellConverterFactory extends AbstractTemporalCellConverterFactory<LocalTime>{

  21.     @Override
  22.     public LocalTimeCellConverter create(final FieldAccessor field, final Configuration config) {

  23.         final LocalTimeCellConverter cellConverter = new LocalTimeCellConverter(field, config);
  24.         setupCellConverter(cellConverter, field, config);

  25.         return cellConverter;

  26.     }

  27.     @Override
  28.     protected LocalTime parseTemporal(final String str, final DateTimeFormatter formatter) throws DateTimeParseException {
  29.         return LocalTime.parse(str, formatter);
  30.     }

  31.     @Override
  32.     protected String getDefaultJavaPattern() {
  33.         return "HH:mm:ss";
  34.     }

  35.     @Override
  36.     protected String getDefaultExcelPattern() {
  37.         return "hh:mm:ss";
  38.     }

  39.     public class LocalTimeCellConverter extends AbstractTemporalCellConverter<LocalTime> {

  40.         private LocalTimeCellConverter(final FieldAccessor field, final Configuration config) {
  41.             super(field, config);
  42.         }

  43.         @Override
  44.         protected LocalTime convertFromDate(final Date date) {
  45.             LocalDateTime dateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
  46.             return dateTime.toLocalTime();
  47.         }

  48.         @Override
  49.         protected Date convertToDate(final LocalTime value, final boolean dateStart1904) {

  50.             final LocalDateTime dateTime;
  51.             if(dateStart1904) {
  52.                 dateTime = value.atDate(LocalDate.of(1904, 1, 1));
  53.             } else {
  54.                 dateTime = value.atDate(LocalDate.of(1899, 12, 31));
  55.             }

  56.             ZonedDateTime zoneDateTime = ZonedDateTime.of(dateTime, ZoneId.systemDefault());

  57.             return Date.from(zoneDateTime.toInstant());
  58.         }

  59.     }

  60. }