String转换为Int型 NumberFormatException

zxc87788091 2012-09-20 01:02:38
RangePoint RangePoint = new RangePoint();
Date nowDate = new Date();

SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
String now = dateFormat.format(nowDate);
if (!now.equals("")) {
System.out.println(now);
int nowTime = Integer.parseInt(now.trim());//转换出错NumberFormatException
RangePoint.getRangeToLimitSpeed(nowTime);
}



now 有值,不为null 或“”;

13:03:50
Exception in thread "main" java.lang.NumberFormatException: For input string: "13:03:50"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at com.test.cn.Deo.main(Deo.java:16)
求大神指点,为什么转换会出错。。。。
...全文
3943 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxc87788091 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]
少个空格
firstTime = dateFormat.parse(dateFormat1.format(date) + " " + time[0]);

不要关心前面的日期,三个比较时间前面的日期是相同的,所以忽略,之所以加上它是为了凑个Date
明白?后面的比较日期相同的情况下就比较时间了
[/Quote]
OK了,是我理解错了,谢谢你哈。
lip009 2012-09-20
  • 打赏
  • 举报
回复
少个空格
firstTime = dateFormat.parse(dateFormat1.format(date) + " " + time[0]);

不要关心前面的日期,三个比较时间前面的日期是相同的,所以忽略,之所以加上它是为了凑个Date
明白?后面的比较日期相同的情况下就比较时间了
zxc87788091 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 的回复:]
firstTime = dateFormat.parse(dateFormat1.format(date) +time[0]);
请看我的转换,你的time[0]是个字符串,怎么可能还用format格式化呢,format需要一个日期参数
[/Quote]
firstTime = dateFormat.parse(dateFormat1.format(date) +time[0]);
打印出来:还报错,而且firstTime也不是我想要的。
Unparseable date: "2012-09-201:23:45"
lip009 2012-09-20
  • 打赏
  • 举报
回复
firstTime = dateFormat.parse(dateFormat1.format(date) +time[0]);
请看我的转换,你的time[0]是个字符串,怎么可能还用format格式化呢,format需要一个日期参数
zxc87788091 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
那你这就有问题了么,这都不是数字,怎么可能转成数字呢,直接用日期作比较把,把你的getRangeToLimitSpeed方法改一下


Java code

public void getRangeToLimitSpeed(Date date){
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:……
[/Quote]

我也这样改得,不过不行。
String first = dateFormat1.format(time[0])
firstTime = dateFormat.parse(first);
报错: java.lang.IllegalArgumentException: Cannot format given Object as a Date
lip009 2012-09-20
  • 打赏
  • 举报
回复
那你这就有问题了么,这都不是数字,怎么可能转成数字呢,直接用日期作比较把,把你的getRangeToLimitSpeed方法改一下


public void getRangeToLimitSpeed(Date date){
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
Date firstTime = null;
Date lastTime = null;
List<String[]> lists = this.getData("[TS]");
for (int i = 0; i < lists.size(); i++) {
String[] time = lists.get(i);
firstTime = dateFormat.parse(dateFormat1.format(date) +time[0]);
lastTime = dateFormat.parse(dateFormat1.format(date) +time[1]);
if(date.compareTo(firstTime) > 0 && date.compareTo(lastTime) < 0){
System.out.println("速度:" + car.getSpeed());
}
}
}
//调用的时候直接传入当前时间即可
RangePoint.getRangeToLimitSpeed(new Date());
zxc87788091 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
time[0]和time[1]的具体值是什么?
[/Quote]
[TS][1:23:45][6:00:00][5.34]
读出来是[1:23:45,6:00:00]
菖蒲老先生 2012-09-20
  • 打赏
  • 举报
回复
就算你改了上面,传了int型的值进来,
firstTime = Integer.valueOf(time[0]);
lastTime = Integer.valueOf(time[1]);
也会报同样的错的,因为"1:23:45"根本就不能转成int型。。。

建议参照9楼和11楼的意见修改一下。。。

[Quote=引用 12 楼 的回复:]

public void getRangeToLimitSpeed(int date){
int firstTime = 0;
int lastTime = 0;
List<String[]> lists = this.getData("[TS]");
for (int i = 0; i < lists.size(); i++) {
String[] time = lists.get(i……
[/Quote]
lip009 2012-09-20
  • 打赏
  • 举报
回复
time[0]和time[1]的具体值是什么?
zx527291227 2012-09-20
  • 打赏
  • 举报
回复
public static void main(String[] args) throws ParseException {
Date nowDate = new Date();

SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
Calendar c = Calendar.getInstance();
System.out.println(c.HOUR);
System.out.println(c.MINUTE);
System.out.println(c.SECOND);
}

这样子不知道是不是你想要的,你说的方法参数是int类型的,不知道你方法里面是怎么实现的,方便的话代码贴出来。
zxc87788091 2012-09-20
  • 打赏
  • 举报
回复
public void getRangeToLimitSpeed(int date){
int firstTime = 0;
int lastTime = 0;
List<String[]> lists = this.getData("[TS]");
for (int i = 0; i < lists.size(); i++) {
String[] time = lists.get(i);
firstTime = Integer.valueOf(time[0]);
lastTime = Integer.valueOf(time[1]);
if(date > firstTime && date < lastTime){
System.out.println("速度:" + car.getSpeed());
}
}
}


[TS][1:23:45][6:00:00][5.34]
[TS][6:00:00][17:00:00][12.34]
lip009 2012-09-20
  • 打赏
  • 举报
回复
难不成要把:去掉?
int nowTime = Integer.parseInt(now.trim().replaceAll(":"));
RangePoint.getRangeToLimitSpeed(nowTime);
菖蒲老先生 2012-09-20
  • 打赏
  • 举报
回复
让我看看你自己定义的时间范围是怎样的?
看到就好办了,一样的格式传进去就可以了。

[Quote=引用 8 楼 的回复:]

引用 3 楼 的回复:
getRangeToLimitSpeed方法是干什么的?
它的参数是干什么的?


getRangeToLimitSpeed 比较当前时间是否在我定义的一个时间范围内。如果是 就返回当前速度。

参数是int(当前时间)。和我定义的时间范围做比较。
[/Quote]
zhanglujie2008 2012-09-20
  • 打赏
  • 举报
回复
如果非的转化的话你就把格式调成SimpleDateFormat dateFormat = new SimpleDateFormat("HHmmss")
然后再转型
zxc87788091 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
getRangeToLimitSpeed方法是干什么的?
它的参数是干什么的?
[/Quote]

getRangeToLimitSpeed 比较当前时间是否在我定义的一个时间范围内。如果是 就返回当前速度。

参数是int(当前时间)。和我定义的时间范围做比较。
zhanglujie2008 2012-09-20
  • 打赏
  • 举报
回复
为啥非的转化成int型 第一次听说
菖蒲老先生 2012-09-20
  • 打赏
  • 举报
回复
这得看方法getRangeToLimitSpeed(nowTime)的逻辑,
看nowTime是干什么用的?才知道应该传什么样的数值进去。。。

[Quote=引用 4 楼 的回复:]

nowTime 为int型。
那我要怎么才能用这个String 13:03:50 呢。
getRangeToLimitSpeed(nowTime)
[/Quote]
zhanglujie2008 2012-09-20
  • 打赏
  • 举报
回复
Integer.parseInt 将字符串参数作为有符号的十进制整数进行解析。
你的now不是有效的十进制字符串。
zxc87788091 2012-09-20
  • 打赏
  • 举报
回复
nowTime 为int型。
那我要怎么才能用这个String 13:03:50 呢。
getRangeToLimitSpeed(nowTime)
菖蒲老先生 2012-09-20
  • 打赏
  • 举报
回复
getRangeToLimitSpeed方法是干什么的?
它的参数是干什么的?
加载更多回复(2)

50,504

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧