extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/converter/DateToYearConverter.java

Code
Comments
Other
Rev Date Author Line
4461 21 Apr 17 nicklas 1 package net.sf.basedb.reggie.converter;
4461 21 Apr 17 nicklas 2
4461 21 Apr 17 nicklas 3 import java.time.Instant;
4461 21 Apr 17 nicklas 4 import java.time.LocalDateTime;
4461 21 Apr 17 nicklas 5 import java.time.ZoneId;
4461 21 Apr 17 nicklas 6 import java.util.Date;
4461 21 Apr 17 nicklas 7
4461 21 Apr 17 nicklas 8 /**
4461 21 Apr 17 nicklas 9   Value converter implementation for converting dates to an integer year.
4461 21 Apr 17 nicklas 10   
4461 21 Apr 17 nicklas 11   @author nicklas
4461 21 Apr 17 nicklas 12   @since 4.10
4461 21 Apr 17 nicklas 13 */
4461 21 Apr 17 nicklas 14 public class DateToYearConverter 
4461 21 Apr 17 nicklas 15   implements ValueConverter<Date, Integer>
4461 21 Apr 17 nicklas 16 {
4461 21 Apr 17 nicklas 17
4461 21 Apr 17 nicklas 18   /**
4461 21 Apr 17 nicklas 19     We will never need more than this instance.
4461 21 Apr 17 nicklas 20   */
4461 21 Apr 17 nicklas 21   public static final DateToYearConverter INSTANCE = new DateToYearConverter();
4461 21 Apr 17 nicklas 22   
4461 21 Apr 17 nicklas 23   /**
4461 21 Apr 17 nicklas 24     Use the singleton instance instead.
4461 21 Apr 17 nicklas 25   */
4461 21 Apr 17 nicklas 26   private DateToYearConverter()
4461 21 Apr 17 nicklas 27   {}
4461 21 Apr 17 nicklas 28   
4461 21 Apr 17 nicklas 29   /*
4461 21 Apr 17 nicklas 30     From the ValueConverter interface
4461 21 Apr 17 nicklas 31     ---------------------------------
4461 21 Apr 17 nicklas 32   */
4461 21 Apr 17 nicklas 33   @Override
4461 21 Apr 17 nicklas 34   public Integer convert(Date value) 
4461 21 Apr 17 nicklas 35   {
4479 05 May 17 nicklas 36     if (value == null) return null;
4461 21 Apr 17 nicklas 37     // IMPORTANT! We must use Instant.ofEpochMilli() instead of Date.toInstant() 
4461 21 Apr 17 nicklas 38     // since java.sql.Date.toInstant() throw UnsupporterOperationException
4461 21 Apr 17 nicklas 39     LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(value.getTime()), ZoneId.systemDefault());
4461 21 Apr 17 nicklas 40     return dateTime.getYear();
4461 21 Apr 17 nicklas 41   }
4461 21 Apr 17 nicklas 42   // ----------------------------------
4461 21 Apr 17 nicklas 43
4461 21 Apr 17 nicklas 44 }