1、报错:java.sql.Timestamp cannot be cast to java.sql.Date
- 错误原因:将从mysql中读取到的Timestamp的数,强制转为String时报错
- 错误描述:通过@Query试图从table中读取一组值,返回为List<Object[ ]>类型,其中包含了Timestamp类型的时间数据。取出这些”原生数据“后,想通过for循环去除Timestamp后面的具体时刻,(将2018-10-19 10:00:15 变为2018-10-19(String))
@Query(value="select registerDate, name from userInfo where userid=?1 ",nativeQuery=true)
List<Object[]> FinduserInfoByUserid( String userid);
- 错误做法:直接用强制类型转换
for(Object[] array_i : useInfo) {
String temp = (String) array_i[0]
array_i[0]=temp.substring(0, 10);
}
- 正确做法:先强制转换为Timestamp类型(这是由于用Object来统一接收),再通过format格式转为Date类型,此时就已经是String了
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String temp = "";
for(Object[] array_i : userInfo) {
java.sql.Timestamp time= (Timestamp) array_i[0]; //这一步必须有,因为取出数据后用Object接收了
System.out.println(time); //2018-10-19 10:00:15.0
temp = sdf.format(time);
System.out.println(temp); //2018-10-19 10:00:15
array_i[0]=temp.substring(0, 10); //只保存年月日
System.out.println(array_i[0]); //2018-10
}
2、用replace函数将String ”2018/10/10“转换为”2018-10-10“
- replace和replaceAll的区别
replace(CharSequence target, CharSequence replacement) //这个就是字符替换字符
replaceAll(String regex, String replacement) //这个考虑到了转义字符的问题
- 为啥用了replace之后,原字符串还是没变呢???哭哭。。蠢哭
String heyhey="2018/09/09";
heyhey.replace("/","-");
System.out.println(heyhey); //没动静:2018/09/09
heyhey=heyhey.replace("/","-");
System.out.println(heyhey); //这下成功了:2018-09-09
3、指定开始时间beginTime和结束时间endTime,去处这段时间内的数据
- 首先,将beginTime、endTime、timeTemp都转为统一的格式
- 再用after、before来界定时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date beginTimeDate = sdf.parse( beginTime );
Date endTimeDate = sdf.parse( endTime );
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String temp = "";
for(Object[] array_i : userInfo) {
java.sql.Timestamp time= (Timestamp) array_i[0];
temp = sdf.format(time);
array_i[0]=temp.substring(0, 10); //只保存年月日
}
for(int i=0 ; i<userInfo.size() ; i++){
Date userRes= sdf.parse((String) userInfo.get(i)[0]);
if ((userRes.after(beginTimeDate))&&(userRes.before(endTimeDate))){
//这里写要对这段时间之内的数据,进行何种操作
}
}