java如何求两个时间的和? 比如说 String s1 = "4:15:58"; String s2 = "4:24:23";如何才能求这两个时间的和?求帮助~! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 两个值必须都是String吗?这样比较麻烦啊。用:把String给分成3部分,然后没部分相加行不行啊 将他们分别都转换成long型的毫秒数,然后相加,把结果放入Date或者Calendar,最后用DateFormat转换回String public static void main(String[] args) throws ParseException { String s1 = "4:15:58"; String s2 = "4:24:23"; SimpleDateFormat sdf = new SimpleDateFormat("H:mm:ss"); Date d1 = sdf.parse(s1); Date d2 = sdf.parse(s2); Calendar c = Calendar.getInstance(); c.setTime(d1); c.add(Calendar.HOUR, d2.getHours()); c.add(Calendar.MINUTE, d2.getMinutes()); c.add(Calendar.SECOND, d2.getSeconds()); System.out.println(sdf.format(c.getTime())); } 一般解法: public static void main(String[] args) { String s1 = "4:15:58"; String s2 = "4:24:23"; String[] t1 = s1.split(":"); String[] t2 = s2.split(":"); int carry = 0; int[] res = new int[3]; for(int i=2;i>=0;i--) { int sum = Integer.valueOf(t1[i])+Integer.valueOf(t2[i]) + carry; if(i!=0) { carry = sum/60; sum %= 60; } res[i] = sum; } StringBuilder sb = new StringBuilder(); for(int i=0;i<3;i++) { sb.append(res[i]); if(i!=2) sb.append(":"); } System.out.println(sb.toString()); } 转换成毫秒数相加,再转换成string类型 Calendar 计算还会计算出大于24小时吗?我没有听过。 时间的本质就是long类型的,可以用setTime()方法转成Date类型,再转成Calendar类型,相反用getTime()方法可以转回去。如果是String可以用SimpleDateFormat类转成Date,Date再转long,这样就可以计算了。手机上的没法给你弄图片,代码也不好写,也不知你看懂了没有,见谅! public class AddDate { public String addTwoDate(String date1 , String date2){ String rs = "";//定义秒存储 String rm = "" ; //定义分存储 String rh = "" ;//定义时存贮 String[] dt1 = date1.split(":") ; String[] dt2 = date2.split(":") ; //时间的小时数位 int h1 = Integer.parseInt(dt1[0]) ; int h2 = Integer.parseInt(dt2[0]) ; //时间的分数位 int m1 = Integer.parseInt(dt1[1]) ; int m2 = Integer.parseInt(dt2[1]) ; //时间的秒数位 int s1 = Integer.parseInt(dt1[2]) ; int s2 = Integer.parseInt(dt2[2]) ; //先对秒进行相加 if((s1+s2) >=60 ){ m1=m1+1 ;//加的数值大于60进位 rs = (s1+s2-60)+"" ;//求的的秒位数值 if(Integer.parseInt(rs) < 10){ rs = "0"+rs ;//进行补零操作 } }else if((s1+s2) > 9){//对于是足够两位数的进行直接显示 rs = (s1+s2)+"" ; }else{//不够两位的数字进行补领操作 rs = "0"+(s1+s2)+""; } //在对分进行相加 if((m1+m2) >=60 ){ h1=h1+1 ;//加的数值大于60进位 rm = (m1+m2-60)+"" ;//求的的秒位数值 if(Integer.parseInt(rm) < 10){//进行补零操作 rm="0"+rm; } }else if((m1+m2) > 9){//对于是足够两位数的进行直接显示 rm = (m1+m2)+"" ; }else{//不够两位的数字进行补领操作 rm = "0"+(m1+m2)+""; } //在对时进行相加 if((h1+h2)>24){//表示相加的天数已经大于一天 rh = (h1+h2)+"" ; }else if((h1+h2)>9){//进行补领操作 rh = (h1+h2)+"" ; }else{ rh = (h1+h2)+"" ; } return rh+":"+rm+":"+rs ; } /** * 将时间类型转化为字符串格式 */ public String Date2String(Date descDate , String pattern){ SimpleDateFormat format = new SimpleDateFormat(pattern) ; return format.format(descDate) ; } /** * 将string类型转化为日期格式 * @param descDate * @return */ public Date String2Date(String descDate , String pattern){ SimpleDateFormat format = new SimpleDateFormat(pattern) ; Date date = null ; try { date = format.parse(descDate) ; } catch (ParseException e) { e.printStackTrace(); } return date ; } } 如果时间这么给 String s1 = "11:15:58"; String s2 = "20:24:23";这个计算结果好像不正确 学习Java要学什么数据库? java更新access数据库的问题 java 连接数据库操作数据库问题 请大家帮忙看看代码什么问题谢谢 怎么判断剪贴板中的数据是复制还是剪切过来的? <C:when test="${aaa=='${bbb}'}">11111</c:when>这样的条件为什么不能成立?? 请问一个eclipse的编译的问题,内详 JLabel如何在鼠标事件中更换ImageIcon? java环境变量问题 jndi如何删除ldap里面的一个目录 java和微软拼音冲突 oracle 11g 连接不上呀 jmf+fobs4 使用java制作媒体播放器
用:把String给分成3部分,然后没部分相加行不行啊
public static void main(String[] args) throws ParseException {
String s1 = "4:15:58";
String s2 = "4:24:23";
SimpleDateFormat sdf = new SimpleDateFormat("H:mm:ss");
Date d1 = sdf.parse(s1);
Date d2 = sdf.parse(s2);
Calendar c = Calendar.getInstance();
c.setTime(d1);
c.add(Calendar.HOUR, d2.getHours());
c.add(Calendar.MINUTE, d2.getMinutes());
c.add(Calendar.SECOND, d2.getSeconds());
System.out.println(sdf.format(c.getTime()));
}
String s1 = "4:15:58";
String s2 = "4:24:23";
String[] t1 = s1.split(":");
String[] t2 = s2.split(":");
int carry = 0;
int[] res = new int[3];
for(int i=2;i>=0;i--)
{
int sum = Integer.valueOf(t1[i])+Integer.valueOf(t2[i]) + carry;
if(i!=0)
{
carry = sum/60;
sum %= 60;
}
res[i] = sum;
}
StringBuilder sb = new StringBuilder();
for(int i=0;i<3;i++)
{
sb.append(res[i]);
if(i!=2)
sb.append(":");
}
System.out.println(sb.toString());
}
Calendar 计算还会计算出大于24小时吗?我没有听过。
如果是String可以用
SimpleDateFormat类转成Date,Date再转long,这样就可以计算了。
手机上的没法给你弄图片,代码也不好写,也不知你看懂了没有,见谅!
String rs = "";//定义秒存储
String rm = "" ; //定义分存储
String rh = "" ;//定义时存贮
String[] dt1 = date1.split(":") ;
String[] dt2 = date2.split(":") ;
//时间的小时数位
int h1 = Integer.parseInt(dt1[0]) ;
int h2 = Integer.parseInt(dt2[0]) ;
//时间的分数位
int m1 = Integer.parseInt(dt1[1]) ;
int m2 = Integer.parseInt(dt2[1]) ;
//时间的秒数位
int s1 = Integer.parseInt(dt1[2]) ;
int s2 = Integer.parseInt(dt2[2]) ;
//先对秒进行相加
if((s1+s2) >=60 ){
m1=m1+1 ;//加的数值大于60进位
rs = (s1+s2-60)+"" ;//求的的秒位数值
if(Integer.parseInt(rs) < 10){
rs = "0"+rs ;//进行补零操作
}
}else if((s1+s2) > 9){//对于是足够两位数的进行直接显示
rs = (s1+s2)+"" ;
}else{//不够两位的数字进行补领操作
rs = "0"+(s1+s2)+"";
}
//在对分进行相加
if((m1+m2) >=60 ){
h1=h1+1 ;//加的数值大于60进位
rm = (m1+m2-60)+"" ;//求的的秒位数值
if(Integer.parseInt(rm) < 10){//进行补零操作
rm="0"+rm;
}
}else if((m1+m2) > 9){//对于是足够两位数的进行直接显示
rm = (m1+m2)+"" ;
}else{//不够两位的数字进行补领操作
rm = "0"+(m1+m2)+"";
}
//在对时进行相加
if((h1+h2)>24){//表示相加的天数已经大于一天
rh = (h1+h2)+"" ;
}else if((h1+h2)>9){//进行补领操作
rh = (h1+h2)+"" ;
}else{
rh = (h1+h2)+"" ;
}
return rh+":"+rm+":"+rs ;
}
/**
* 将时间类型转化为字符串格式
*/
public String Date2String(Date descDate , String pattern){
SimpleDateFormat format = new SimpleDateFormat(pattern) ;
return format.format(descDate) ;
}
/**
* 将string类型转化为日期格式
* @param descDate
* @return
*/
public Date String2Date(String descDate , String pattern){
SimpleDateFormat format = new SimpleDateFormat(pattern) ;
Date date = null ;
try {
date = format.parse(descDate) ;
} catch (ParseException e) {
e.printStackTrace();
}
return date ;
}
}
String s1 = "11:15:58";
String s2 = "20:24:23";
这个计算结果好像不正确