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 |
Value converter implementation for converting dates to an integer year. |
4461 |
21 Apr 17 |
nicklas |
10 |
|
4461 |
21 Apr 17 |
nicklas |
@author nicklas |
4461 |
21 Apr 17 |
nicklas |
@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 |
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 |
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 |
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 |
// IMPORTANT! We must use Instant.ofEpochMilli() instead of Date.toInstant() |
4461 |
21 Apr 17 |
nicklas |
// 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 |
} |