在Java中将日期为格式为“20110913”的字符串转换为“2011-09-13”的最快方法是什么。
答案 0 :(得分:5)
使用java.text.DateFormat
:
DateFormat inputFormat = new SimpleDateFormat("yyyyMMdd");
inputFormat.setLenient(false);
DateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd");
Date inputDate = inputFormat.parse("20110913);
System.out.println(outputFormat.format(inputDate));
答案 1 :(得分:4)
我做了一些简单的分析,发现了一些有趣的结果。
public static String strcat(String ori){
return ori.substring(0, 4) + '-' + ori.substring(4, 6) + '-' + ori.substring(6);
}
public static String sdf(String ori){
try {
SimpleDateFormat in = new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat out = new SimpleDateFormat("yyyy-MM-dd");
Date temp = in.parse(ori);
return out.format(temp);
} catch (ParseException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
public static String sb(String ori){
return new StringBuilder(10).append(ori.substring(0, 4)).append('-').append(ori.substring(4, 6)).append('-').append(ori.substring(6)).toString();
}
public static String nio(String ori){
byte[] temp = ori.getBytes();
ByteBuffer bb = ByteBuffer.allocate(temp.length + 2);
bb.put(temp, 0, 4);
byte hyphen = '-';
bb.put(hyphen);
bb.put(temp, 4, 2);
bb.put(hyphen);
bb.put(temp, 6, 2);
return new String(bb.array());
}
public static String qd(String ori){
char[] result = new char[10];
result[4] = result[7] = '-';
char[] temp = ori.toCharArray();
System.arraycopy(temp, 0, result, 0, 4);
System.arraycopy(temp, 4, result, 5, 2);
System.arraycopy(temp, 6, result, 8, 2);
return new String(result);
}
public static void main(String[] args) {
String ori = "20110913";
int rounds = 10000;
for (int i = 0; i < rounds; i++) {
qd(ori);
nio(ori);
sb(ori);
sdf(ori);
strcat(ori);
}
}
通过以上几种方法,我运行了三次测试,结果(平均值)如下: -
sb 15.7ms
strcat 15.2ms
qd 27.2ms
nio 137.6ms
sdf 582ms
使用JDK 7运行测试。请注意,这不是一个广泛的分析,因为可以进行大量优化(例如,缓存SimpleDateFormat,StringBuilder)。此外,此测试不是多线程的。所以,做个自己的程序! 附: strcat比sb更快不是我的预期。我想编译器优化在这里发挥了重要作用。
答案 2 :(得分:0)
使用StringBuilder,在它们之间插入插入' - '字符的子字符串。