java任意对象转换成Date对象

因为数据库等的原因,导致了使用原始sql查询出的日期可能是字符串也可能是数值也可能是date对象,所以写了这个工具方法以解决问题 代码如下
正常格式的字符串应该能解析 时间戳支持到秒和到毫秒 如果本身就是date 直接原样返回,其他异常全部返回null

/**
     * 解析字符串日期,不报错  异常返回null
     * @param d
     * @param format
     * @return
     * @author lsg
     * @created 2018-11-27 下午4:30:35
     */
    public static Date parseDate(String d,String format) {
        try {
            return new SimpleDateFormat(format).parse(d);
         } catch (ParseException e) {
            return null;
         }
    }
/**
     * 解析对象到日期
     * @param object
     * @return
     * @author lsg
     * @created 2018-11-27 下午4:08:10
     */
    public static Date parseDate(Object o) {
        if (o == null) {
            return null;
        }
        if (o instanceof Date) {
            return (Date) o;
        }
        if (o instanceof java.sql.Date) {
            return (Date) o;
        }
        if (o instanceof String) {
            // yyyy-MM-dd HH:mm:ss  /
            String d=(String) o;
            StringBuilder format=new StringBuilder("yyyy");
            if (d.charAt(4)=='-') {
                format.append("-MM-dd");
            }else if(d.charAt(4)=='/') {
                format.append("/MM/dd");
            }else if (d.charAt(4)=='_'){
                format.append("_MM_dd");
            }else {
                format.append("MMdd");
            }
            if (d.length()<format.length()) {
                return null;
            }else if (d.length()==format.length()) {
                return parseDate(d, format.toString());
            }
            if (d.charAt(format.length())==' ') {
                format.append(' ');
            }
            if (d.charAt(format.length()+2)==':') {
                format.append("HH:mm:ss");
            }else if (d.charAt(format.length()+2)=='/') {
                format.append("HH/mm/ss");
            }else {
                format.append("HHmmss");
            }
            if (d.length()<format.length()) {
                return null;
            }
            if (d.length()==format.length()) {
                return parseDate(d,format.toString());
            }
            if (d.charAt(format.length())=='.'&&d.length()==(format.length()+4)) {
                format.append(".SSS");
            }else if(d.length()==(format.length()+3)){
                format.append("SSS");
            }else {
                d=d.substring(0, format.length());
            }
            return parseDate(d, format.toString());
        }
        if (o instanceof Long) {
            long l=(long) o;
            if (l<10000000000l) {
                return new Date(l*1000); 
            }
            return new Date(l);
        }
        if (o instanceof Integer) {
            long l=(int)o*1000;
            return new Date(l); 
        }
        return null;
    }
	public static void main(String[] args) {
	        Object o=null;
	        o=new Date();
	//        o="2018-10-10 11:00:51.666";
	//        o="20181010110051666";
	//        o="2018/10/10 11:00:51";
	//        o="20181010 11:00:51.666";
	        o="2018-10-10 11:00:51";
	//        o="2018-10-10 110051";
	        Date parseDate = parseDate(o);
	        System.out.println(parseDate);
	        if (parseDate!=null) {
	            System.out.println(new DateTime(parseDate).toString("yyyy-MM-dd HH:mm:ss.SSS"));
	        }
	    }
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值