SimpleDateFormat :{ ParseException: Unparseable date} 问题原因以及解决方法

1、报错

转换格式:SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
报错:
	java.text.ParseException: Unparseable date: "2020/1/12"
	    at java.text.DateFormat.parse(DateFormat.java:366)
	    at com.hxjs.website.modules.epanalysis.controller.ScehduledThread.run(ScehduledThread.java:53)
	    at com.hxjs.website.modules.sys.controller.SysLoginController$1.run(SysLoginController.java:106)
	    at java.util.TimerThread.mainLoop(Timer.java:555)
	    at java.util.TimerThread.run(Timer.java:505)

2、分析原因

SimpleDateFormat simpleFormat = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
我所使用的与实际要转换的不一致,导致报错

3、解决

在转换的时候必须保持 转换字符串和转换类型格式一致

提供一个代码片段(只是简单做了一下判断,只能满足几种日期转换(写的不是很好,有待优化))

/**
	 * 日期类型转换
	 * @param date
	 * @return
	 * @throws ParseException
	 */
	private Date dateCl(String date) throws ParseException {
    
    
		SimpleDateFormat simpleDateFormat=null;
		if (date.contains("-") && date.contains(":")){
    
    
			if (Objects.equals(stringCount(date,":"),2)){
    
    
				simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
				return simpleDateFormat.parse(date);
			}else if (Objects.equals(stringCount(date,":"),1)){
    
    
				simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd hh:mm");
				return simpleDateFormat.parse(date);
			}
		}else if (date.contains("/") && date.contains(":")){
    
    
			if (Objects.equals(stringCount(date,":"),2)){
    
    
				simpleDateFormat=new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
				return simpleDateFormat.parse(date);
			}else if (Objects.equals(stringCount(date,":"),1)){
    
    
				simpleDateFormat=new SimpleDateFormat("yyyy/MM/dd hh:mm");
				return simpleDateFormat.parse(date);
			}
		}else if (date.contains("/") && !date.contains(":")){
    
    
			simpleDateFormat=new SimpleDateFormat("yyyy/MM/dd");
			return simpleDateFormat.parse(date);
		}else if (date.contains("-") && !date.contains(":")){
    
    
			simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
			return simpleDateFormat.parse(date);
		}
		return null;
	}

	/**
	 * 获取字符串出现的次数
	 * @param data
	 * @param s
	 * @return
	 */
	private int stringCount(String data,String s){
    
    
		String str = data;
		String searchChar = s;
		int count = 0;
		int origialLength = str.length();
		str = str.replace(searchChar, "");
		int newLength = str.length();
		count = origialLength - newLength;
		return count;
	}

4、补充

1、使用SimpleDateFormat对时间进行格式化,但SimpleDateFormat是线程不安全的,推荐使用LocalDateTime

参考此篇博客

猜你喜欢

转载自blog.csdn.net/lijie0213/article/details/129501484
今日推荐