日期:2014-05-20  浏览次数:20656 次

求给我讲解下红色部分的代码
import java.util.Calendar;
import java.util.GregorianCalendar;

public class DateTime {
private Calendar calendar = new GregorianCalendar();

public String getDate() {
StringBuffer buf = new StringBuffer();
buf.append(calendar.get(Calendar.YEAR)).append("-");
buf.append(this.addZero(calendar.get(Calendar.MONTH) + 1, 2)).append(
"-");
buf.append(this.addZero(calendar.get(Calendar.DAY_OF_MONTH), 2))
.append(" ");
buf.append(this.addZero(calendar.get(Calendar.HOUR_OF_DAY), 2)).append(
":");
buf.append(this.addZero(calendar.get(Calendar.MINUTE), 2)).append(".");
buf.append(this.addZero(calendar.get(Calendar.MILLISECOND), 3));
return buf.toString();
}

private String addZero(int temp, int len) //在某些位不足的情况下加上“0”
{
StringBuffer str = new StringBuffer();
str.append(temp); // 加入数字
while (str.length() < len) {
str.insert(0, 0);
}
return str.toString();
}



public static void main(String[] args) {
System.out.println(new DateTime().getDate());
}
}

输出的结果格式类似于“2013-01-28 21:02.078” 我想求教给我讲下红色代码处的内存活动情况,或者讲讲这段代码,初学java不是很理解 拜托了 みなさん

------解决方案--------------------
StringBuffer是可变长字符串,new 一个的时候,相当于在内存里分配一个空间。当使用append的时候,就会把temp的值加入这个内存中,然后进行运算。随后操作的结果,都会保存在这个地址空间中,直到使用return。你要是想输出那种日期样式,用这种方法是不被允许的。
------解决方案--------------------
引用:
str.append(temp); // 加入数字
这块是往哪里假如数字

红色的前面部分看到了吗,那些是获取的具体的日期数字,如2013-1-30,获取到2013,1,30,然后调用红色字体方法处理,当获取到的日期数字不是两位数的时候,则在前面加0,就像月份1,不足两位,在1前面加0,这些操作都是在StringBuffer里面操作的,也就是把int转化成了String处理,输出的是String类型。addZero(int temp, int len)这个方法,第一个参数temp表示的是获取的日期数字,第二个参数len表示的是这个日期数字要求几位。