最近在做一个项目中使用了友善之臂Micro2440,其中系统使用的是Embedded Linux。遇到了一个问题,就是程序运行非常的缓慢。
开始以为是读写文件的问题,于是测试过将数据写到excel中、sqlite数据库中、csv文件中,结果都是不行。
也曾经以为是JVM的内存不够,后来设置-Xms16m -Xmx32m,结果还是不行。
最后经过测试发现,居然是SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");这行代码运行特别的缓慢。每次执行居然需要2~3s的时间,后来没有办法,使用了自己写的时间对象和字符串对象的转换函数。终于将这个问题解决了。这里将代码写出来与大家共享。
package com.ps;
import Java.sql.Timestamp;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class TimeFormatProcess {
/*
* 功能:将形如“ 2012-08-02 22:56:00”的字符串(字符串长度19)
* 转换为Calendar类,并返回一个Calendar对象
* 作者:YOUYOU
* 备注:该函数配合运行于Micro2440上的Embedded Linux
* 因为SimpleDateFormat 类在Embedded Linux平台上响应
* 太慢(2~3秒)
*/
public static Calendar praseStringToCalendar(String strCalendar) {
String strYear = null;
String strMonth = null;
String strDay = null;
String strHour = null;
String strMinute = null;
String strSecond = null;
int iYear = 0;
int iMonth = 0;
int iDay = 0;
int iHour = 0;
int iMinute = 0;
int iSecond = 0;
strYear = strCalendar.substring(0, 4);
iYear = Integer.valueOf(strYear);
// System.out.println(iYear);
strMonth = strCalendar.substring(5, 7);
iMonth = Integer.valueOf(strMonth);
// System.out.println(iMonth);
strDay = strCalendar.substring(8, 10);
iDay = Integer.valueOf(strDay);
// System.out.println(iDay);
strHour = strCalendar.substring(11, 13);
iHour = Integer.valueOf(strHour);
// System.out.println(iHour);
strMinute = strCalendar.substring(14, 16);
iMinute = Integer.valueOf(strMinute);
// System.out.println(iMinute);
strSecond = strCalendar.substring(17);
iSecond = Integer.valueOf(strSecond);
// System.out.println(iSecond);
Calendar calTemp = new GregorianCalendar(iYear, iMonth, iDay, iHour, iMinute, iSecond);
return calTemp;
}
/*
* 功能:将一个Calendar对象转化为形如“ 2012-08-02 22:56:00”的
* 字符串(字符串长度19),并返回一个String对象
* 作者:YOUYOU
* 备注:该函数配合运行于Micro2440上的Embedded Linux
* 因为SimpleDateFormat 类在Embedded Linux平台上响应
* 太慢(2~3秒)
*/
public static String praseCanlendarToString(Calendar calTemp){
Timestamp timestampTemp = new Timestamp(calTemp.getTimeInMillis());
String strAllTimeTemp = timestampTemp.toString();
String strTimeTemp = strAllTimeTemp.substring(0, 19);
return strTimeTemp;
}
}