Java SQL Date From toSQLDate(Object object, Object oDefault)

Here you can find the source of toSQLDate(Object object, Object oDefault)

Description

to SQL Date

License

Apache License

Declaration

public static java.sql.Date toSQLDate(Object object, Object oDefault) 

Method Source Code


//package com.java2s;
/*//  w  w  w  .  j  a  va2  s  .c  o  m
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import java.lang.reflect.Array;

import java.util.Calendar;
import java.util.Collection;

import java.util.GregorianCalendar;

import java.util.Iterator;

import java.util.Map;

public class Main {
    public static java.sql.Date toSQLDate(Object object, Object oDefault) {
        if (object == null) {
            if (oDefault == null)
                return null;
            return toSQLDate(oDefault, null);
        }
        if (object instanceof java.sql.Date) {
            return (java.sql.Date) object;
        }
        if (object instanceof java.util.Date) {
            return new java.sql.Date(((java.util.Date) object).getTime());
        }
        if (object instanceof java.util.Calendar) {
            return new java.sql.Date(((java.util.Calendar) object).getTimeInMillis());
        }
        if (object instanceof Long) {
            return new java.sql.Date(((Long) object).longValue());
        }
        if (object instanceof Number) {
            int iDate = ((Number) object).intValue();
            if (iDate < 10000)
                return toSQLDate(oDefault, null);
            return new java.sql.Date(intToLongDate(iDate));
        }
        if (object instanceof Collection) {
            return toSQLDate(getFirst(object), oDefault);
        }
        if (object.getClass().isArray()) {
            return toSQLDate(getFirst(object), oDefault);
        }
        if (object instanceof Map) {
            return toSQLDate(oDefault, null);
        }
        String sValue = object.toString();
        if (sValue == null || sValue.length() == 0)
            return toSQLDate(oDefault, null);
        String sDate = normalizeStringDate(sValue);
        if (sDate == null)
            return toSQLDate(oDefault, null);
        return new java.sql.Date(stringToLongDate(sDate));
    }

    public static long intToLongDate(int iDate) {
        if (iDate < 10000)
            return System.currentTimeMillis();
        int iYear = iDate / 10000;
        int iMonth = (iDate % 10000) / 100;
        int iDay = (iDate % 10000) % 100;
        Calendar calendar = new GregorianCalendar(iYear, iMonth - 1, iDay);
        return calendar.getTimeInMillis();
    }

    public static Object getFirst(Object object) {
        if (object == null)
            return null;
        if (object instanceof Collection) {
            Collection collection = (Collection) object;
            Iterator iterator = collection.iterator();
            if (iterator.hasNext())
                return iterator.next();
        } else if (object.getClass().isArray()) {
            int length = Array.getLength(object);
            if (length == 0)
                return null;
            return Array.get(object, 0);
        }
        return null;
    }

    public static String toString(Object object, String sDefault) {
        if (object == null)
            return sDefault;
        if (object instanceof String) {
            return (String) object;
        }
        if (object instanceof java.util.Date) {
            return longDateToString(((java.util.Date) object).getTime(), false);
        }
        if (object instanceof java.util.Calendar) {
            return longDateToString(((java.util.Calendar) object).getTimeInMillis(), false);
        }
        if (object instanceof Collection) {
            return toString(getFirst(object), sDefault);
        }
        if (object instanceof Map) {
            return sDefault;
        }
        if (object instanceof byte[]) {
            return new String((byte[]) object);
        }
        if (object instanceof char[]) {
            return new String((char[]) object);
        }
        return object.toString();
    }

    public static String toString(Object object, String sDefault, int iMaxLength) {
        String sResult = toString(object, sDefault);
        if (sResult != null && iMaxLength > 0 && sResult.length() > iMaxLength) {
            return sResult.substring(0, iMaxLength);
        }
        return sResult;
    }

    public static String normalizeStringDate(String sValue) {
        return normalizeStringDate(sValue, false);
    }

    public static String normalizeStringDate(String sValue, boolean boExcludeNumber) {
        if (sValue == null)
            return null;
        sValue = sValue.trim();
        if (sValue.length() == 0)
            return null;
        if (sValue.length() >= 28 && Character.isLetter(sValue.charAt(0))) {
            // Ad es. Tue Jan 01 00:00:00 CET 2013
            String sYear = sValue.substring(sValue.length() - 4);
            try {
                Integer.parseInt(sYear);
            } catch (Throwable th) {
                return null;
            }
            String sMonth = getMonth(sValue.substring(4, 7));
            if (sMonth == null || sMonth.length() < 2)
                return null;
            String sDay = sValue.substring(8, 10);
            int iDay = 0;
            try {
                iDay = Integer.parseInt(sDay);
            } catch (Throwable th) {
                return null;
            }
            if (iDay < 1 || iDay > 31)
                return null;
            return sYear + sMonth + sDay;
        }
        int iFirstSep = sValue.indexOf('/');
        if (iFirstSep < 0) {
            iFirstSep = sValue.indexOf('-');
            if (iFirstSep <= 0) {
                iFirstSep = sValue.indexOf('.');
                if (iFirstSep <= 0) {
                    if (boExcludeNumber)
                        return null;
                    if (sValue.length() > 8) {
                        long lValue = 0;
                        try {
                            lValue = Long.parseLong(sValue);
                        } catch (Throwable th) {
                            return null;
                        }
                        Calendar cal = Calendar.getInstance();
                        cal.setTimeInMillis(lValue);
                        int iDate = cal.get(Calendar.YEAR) * 10000 + (cal.get(Calendar.MONTH) + 1) * 100
                                + cal.get(Calendar.DAY_OF_MONTH);
                        return String.valueOf(iDate);
                    }
                    if (sValue.length() != 8)
                        return null;
                    try {
                        Integer.parseInt(sValue);
                    } catch (Throwable th) {
                        return null;
                    }
                    return sValue;
                }
            }
        }
        int iSecondSep = sValue.indexOf('/', iFirstSep + 1);
        if (iSecondSep < 0) {
            iSecondSep = sValue.indexOf('-', iFirstSep + 1);
            if (iSecondSep < 0) {
                iSecondSep = sValue.indexOf('.', iFirstSep + 1);
                if (iSecondSep < 0)
                    return null;
            }
        }
        String sDay = null;
        String sMonth = null;
        String sYear = null;
        if (iFirstSep >= 4) {
            // year - month - day
            sYear = sValue.substring(0, iFirstSep).trim();
            sMonth = sValue.substring(iFirstSep + 1, iSecondSep).trim();
            sDay = sValue.substring(iSecondSep + 1).trim();
            if (sDay.length() > 2)
                sDay = sDay.substring(0, 2);
        } else {
            // day - month - year
            sDay = sValue.substring(0, iFirstSep).trim();
            sMonth = sValue.substring(iFirstSep + 1, iSecondSep).trim();
            sYear = sValue.substring(iSecondSep + 1).trim();
            if (sYear.length() > 4)
                sYear = sYear.substring(0, 4);
        }
        // Check Day
        if (sDay.length() == 0)
            sDay = "01";
        else if (sDay.length() == 1)
            sDay = "0" + sDay;
        int iDay = 0;
        try {
            iDay = Integer.parseInt(sDay);
        } catch (Throwable th) {
            return null;
        }
        if (iDay < 1 || iDay > 31)
            return null;
        // Check Month
        if (sMonth.length() > 2 && Character.isLetter(sMonth.charAt(0))) {
            sMonth = getMonth(sMonth);
            if (sMonth == null)
                return null;
        }
        if (sMonth.length() == 0)
            sMonth = "01";
        else if (sMonth.length() == 1)
            sMonth = "0" + sMonth;
        int iMonth = 0;
        try {
            iMonth = Integer.parseInt(sMonth);
        } catch (Throwable th) {
            return null;
        }
        if (iMonth < 1 || iMonth > 12)
            return null;
        // Check Year
        int iYear = 0;
        try {
            iYear = Integer.parseInt(sYear);
        } catch (Throwable th) {
            return null;
        }
        if (iYear < 1000 || iYear > 9999)
            return null;
        return sYear + sMonth + sDay;
    }

    public static long stringToLongDate(String sDate) {
        if (sDate == null)
            return System.currentTimeMillis();
        int iDate = 0;
        try {
            iDate = Integer.parseInt(sDate);
        } catch (Exception ex) {
            return System.currentTimeMillis();
        }
        int iYear = iDate / 10000;
        int iMonth = (iDate % 10000) / 100;
        int iDay = (iDate % 10000) % 100;
        Calendar calendar = new GregorianCalendar(iYear, iMonth - 1, iDay);
        return calendar.getTimeInMillis();
    }

    public static String longDateToString(long lDateTime, boolean boAddTime) {
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(lDateTime);
        int iYear = cal.get(java.util.Calendar.YEAR);
        int iMonth = cal.get(java.util.Calendar.MONTH) + 1;
        int iDay = cal.get(java.util.Calendar.DATE);
        String sTime = "";
        if (boAddTime) {
            int iHH = cal.get(Calendar.HOUR_OF_DAY);
            int iMM = cal.get(Calendar.MINUTE);
            int iSS = cal.get(Calendar.SECOND);
            String sHH = iHH < 10 ? "0" + iHH : String.valueOf(iHH);
            String sMM = iMM < 10 ? "0" + iMM : String.valueOf(iMM);
            String sSS = iSS < 10 ? "0" + iSS : String.valueOf(iSS);
            sTime = " " + sHH + ":" + sMM + ":" + sSS;
        }
        String sMonth = iMonth < 10 ? "0" + iMonth : String.valueOf(iMonth);
        String sDay = iDay < 10 ? "0" + iDay : String.valueOf(iDay);
        return iYear + "-" + sMonth + "-" + sDay + sTime;
    }

    public static String getMonth(String sMonth) {
        String sMonthLC = sMonth.toLowerCase();
        if (sMonthLC.startsWith("jan") || sMonthLC.startsWith("ge"))
            return "01";
        if (sMonthLC.startsWith("f"))
            return "02";
        if (sMonthLC.startsWith("mar"))
            return "03";
        if (sMonthLC.startsWith("ap"))
            return "04";
        if (sMonthLC.startsWith("may") || sMonthLC.startsWith("mag"))
            return "05";
        if (sMonthLC.startsWith("jun") || sMonthLC.startsWith("gi"))
            return "06";
        if (sMonthLC.startsWith("jul") || sMonthLC.startsWith("lu"))
            return "07";
        if (sMonthLC.startsWith("au") || sMonthLC.startsWith("ag"))
            return "08";
        if (sMonthLC.startsWith("s"))
            return "09";
        if (sMonthLC.startsWith("o"))
            return "10";
        if (sMonthLC.startsWith("n"))
            return "11";
        if (sMonthLC.startsWith("d"))
            return "12";
        return null;
    }
}

Related

  1. toSqlDate(final Date date)
  2. toSqlDate(final String _text, final String _dateFormat)
  3. toSQLDate(java.util.Date date)
  4. toSqlDate(java.util.Date date)
  5. toSQLDate(java.util.Date date)
  6. toSqlDate(String date)
  7. toSqlDate(String date)
  8. toSqlDate(String dateStr, String format)
  9. toSQLDate(String dt)