java项目中遇到的一些小问题记录——时间篇

本文详细介绍了在Java中处理日期和时间的常见问题及解决方案,包括如何正确转换Timestamp到Date,使用replace和replaceAll函数处理字符串日期格式,以及如何筛选特定时间段的数据。通过实例演示了如何避免类型转换错误,并提供了实用的代码片段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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))){
                   //这里写要对这段时间之内的数据,进行何种操作
    }
 }

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值