package org.codelibs.riverweb.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; public class ConversionUtil { public static final String ISO_DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; public static final TimeZone TIMEZONE_UTC = TimeZone.getTimeZone("UTC"); public static <T> T convert(Object value, Class<T> clazz) { if (value instanceof CharSequence) { final String text = value.toString(); if (clazz.isAssignableFrom(Integer.class)) { return (T) Integer.valueOf(text); } else if (clazz.isAssignableFrom(Long.class)) { return (T) Long.valueOf(text); } else if (clazz.isAssignableFrom(Date.class)) { return (T) parseDate(text); } else if (clazz.isAssignableFrom(String.class)) { return (T) text; } } else if (value instanceof Number) { final Number v = (Number) value; if (clazz.isAssignableFrom(String.class)) { return (T) v.toString(); } else if (clazz.isAssignableFrom(Integer.class)) { return (T) Integer.valueOf(v.intValue()); } else if (clazz.isAssignableFrom(Long.class)) { return (T) Long.valueOf(v.intValue()); } else if (clazz.isAssignableFrom(Date.class)) { return (T) new Date(v.longValue()); } } else if (value instanceof Date) { final Date d = (Date) value; if (clazz.isAssignableFrom(String.class)) { return (T) formatDate(d); } else if (clazz.isAssignableFrom(Integer.class)) { return (T) Integer.valueOf((int) d.getTime()); } else if (clazz.isAssignableFrom(Long.class)) { return (T) Long.valueOf(d.getTime()); } else if (clazz.isAssignableFrom(Date.class)) { return (T) d; } } return null; } public static String formatDate(final Date date) { if (date == null) { return null; } final SimpleDateFormat sdf = new SimpleDateFormat(ISO_DATETIME_FORMAT); sdf.setTimeZone(TIMEZONE_UTC); return sdf.format(date); } public static Date parseDate(final String value) { if (value == null) { return null; } try { final SimpleDateFormat sdf = new SimpleDateFormat(ISO_DATETIME_FORMAT); sdf.setTimeZone(TIMEZONE_UTC); return sdf.parse(value); } catch (final ParseException e) { return null; } } }