in src/main/java/org/apache/commons/beanutils2/converters/DateTimeConverter.java [214:296]
protected <T> T convertToType(final Class<T> targetType, final Object value) throws Exception {
final Class<?> sourceType = value.getClass();
// Handle java.sql.Timestamp
if (value instanceof java.sql.Timestamp) {
// N.B. Prior to JDK 1.4 the Timestamp's getTime() method
// didn't include the milliseconds. The following code
// ensures it works consistently across JDK versions
final java.sql.Timestamp timestamp = (java.sql.Timestamp)value;
long timeInMillis = ((timestamp.getTime() / 1000) * 1000);
timeInMillis += timestamp.getNanos() / 1000000;
return toDate(targetType, timeInMillis);
}
// Handle Date (includes java.sql.Date & java.sql.Time)
if (value instanceof Date) {
final Date date = (Date) value;
return toDate(targetType, date.getTime());
}
// Handle Calendar
if (value instanceof Calendar) {
final Calendar calendar = (Calendar) value;
return toDate(targetType, calendar.getTime().getTime());
}
// Handle Long
if (value instanceof Long) {
final Long longObj = (Long) value;
return toDate(targetType, longObj.longValue());
}
// Handle LocalDate
if (value instanceof LocalDate) {
final LocalDate date = (LocalDate) value;
return toDate(targetType, date.atStartOfDay(getZoneId()).toInstant().toEpochMilli());
}
// Handle LocalDateTime
if (value instanceof LocalDateTime) {
final LocalDateTime date = (LocalDateTime) value;
return toDate(targetType, date.atZone(getZoneId()).toInstant().toEpochMilli());
}
// Handle ZonedDateTime
if (value instanceof ZonedDateTime) {
final ZonedDateTime date = (ZonedDateTime) value;
return toDate(targetType, date.toInstant().toEpochMilli());
}
// Handle OffsetDateTime
if (value instanceof OffsetDateTime) {
final OffsetDateTime date = (OffsetDateTime) value;
return toDate(targetType, date.toInstant().toEpochMilli());
}
// Convert all other types to String & handle
final String stringValue = toTrim(value);
if (stringValue.isEmpty()) {
return handleMissing(targetType);
}
// Parse the Date/Time
if (useLocaleFormat) {
Calendar calendar = null;
if (patterns != null && patterns.length > 0) {
calendar = parse(sourceType, targetType, stringValue);
} else {
final DateFormat format = getFormat(locale, timeZone);
calendar = parse(sourceType, targetType, stringValue, format);
}
if (Calendar.class.isAssignableFrom(targetType)) {
return targetType.cast(calendar);
}
return toDate(targetType, calendar.getTime().getTime());
}
// Default String conversion
return toDate(targetType, stringValue);
}