最近在做一個項目中使用了友善之臂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;
}
}