
import java.util.Calendar;
import java.util.*;
import java.sql.Timestamp;

public class TimeFormat


{
private static String[] keywords =

{
"year", "month", "day", "hour", "minute", "second", "millisecond"};
private String format;
private Calendar whatTime;

public TimeFormat()

{
}


/** *//**
*
* @param format year-month-day hour:minute:second 2005-11-25 22:02
* @param timeStr
* @return
*
* year年month月day日 hour點minute分second秒
* 2005年11月25日 22點22分15秒
* 2005/11/25 22:22
* 05/11/25 22:22
*/
public static Calendar getTime(String format, String timeVarStr)

{
String timeFormatStr = format;
Calendar whatTime = null;
int year = 0, month = 0, day = 0, hour = 0, minute = 0,
second = 0, millisecond = 0;

String[] validTimeElements =

{
"year", "month", "day", "hour", "minute", "second", "millisecond"};

int dateVarCount = 0;
int index = -1;

Vector tmpV = new Vector();

Map map = new HashMap();

for (int i = 0; i < validTimeElements.length; i++)

{
int pos = format.indexOf(validTimeElements[i]);
if(pos>=0)

{
map.put(new Integer(pos),validTimeElements[i]);
}
}

Object[] tmp = map.keySet().toArray();
Integer[] tmpInt = new Integer[tmp.length];

for(int i = 0; i<tmpInt.length;i++)

{
tmpInt[i] = (Integer) tmp[i];
}

//從小到大排序, 還原原來的順序.
Arrays.sort(tmpInt);
String[] varNames = new String[tmpInt.length];

for(int i=0;i<varNames.length;i++)

{
varNames[i] = (String) map.get(tmpInt[i]);
}

String[] varValue = getTimeInOriginOrder(timeVarStr); //變量值

if(varValue==null)

{
System.out.println("獲取時間變量的值出錯了.");
return null;
}

int[] timeElementValue = new int[validTimeElements.length];

for(int i=0;i<varNames.length;i++)

{
for(int j=0;j<validTimeElements.length;j++)

{
if(varNames[i].equals(validTimeElements[j]))

{
timeElementValue[j] = Integer.parseInt(varValue[i]);
break;
}
}
}

if(format.indexOf("month")>=0 || format.indexOf("day")>=0)

{
if(format.indexOf("year")<0)

{
System.out.println("沒有年, 使用當前的年為缺省值.");
timeElementValue[0] = Calendar.getInstance().get(Calendar.YEAR);
}

//目前禁止年份是非4位數(shù)字表示的
String tmpStr = timeElementValue[0]+"";
if(tmpStr.length()<4)

{
System.out.println("目前禁止年份是非4位數(shù)字表示的,因為我們無法確定到底是哪一年");
return null;
}


whatTime = Calendar.getInstance();
whatTime.set(timeElementValue[0], timeElementValue[1] - 1,
timeElementValue[2], timeElementValue[3], timeElementValue[4],
timeElementValue[5]);
}
else

{
System.out.println("時間變量獲取失敗,至少必須又2個時間變量. year,month,day 必須都有, 可以允許year沒有使用當前年份");
whatTime = null;
}
return whatTime;
}



/** *//**
* 把時間變量的值按順序取出,以逗號隔開
* @param val
* @return
*/
static private String[] getTimeInOriginOrder(String val)

{
String temp = "";
String digital = "0123456789";
for (int i = 0; i < val.length(); i++)

{
if (digital.indexOf(val.substring(i, i + 1)) > -1)

{
temp = temp + val.substring(i, i + 1);
}
else

{
if (temp.length()>0 && temp.charAt(temp.length()-1)!=',' )

{
temp = temp + ",";
}
}
}

System.out.println(temp);
return temp.split(","); //以逗號隔開的數(shù)組.
}

public Calendar getTime(String timeStr)

{
return getTime(format, timeStr);
}


/** *//**year, month, day, hour, minute,second, millisecond
年 月 日 時 分 秒 毫秒
這里暫時假設年份都是顯示4位數(shù)字,月分和天數(shù)都是顯示不帶前置0的形式,
如1998年9月3日,就不顯示為98年09月03日,等日后完善。
如果有顯示年必須指定年要顯示多少位。
假設當前時間是:2002-11-15 20:13:55.359
用戶設置: year年month月day日hour時minute分second秒
輸出:2002年11月15日 20時13分55秒
用戶設置: year年month月day日
輸出:2002年11月15日
注意必須用小寫的形式,大寫的不行,因為用戶可能在時間字符串內(nèi)
也有大小寫有區(qū)別的其他單詞.
**/


/** *//**
如果正確 就返回其出現(xiàn)的位置,如果錯誤就返回-1.
*/

public static int isTimestampValid(String timeStr, String element)

{
//case1:不包含
int firstIndex = timeStr.indexOf(element);
if (firstIndex < 0)

{
return firstIndex;
}

//應經(jīng)包含了一次。
int nextfrom = firstIndex + element.length();

//已經(jīng)到了盡頭, 不用再找了。
if (nextfrom >= timeStr.length())

{
return firstIndex; //element occurs only once in timeStr.
}

int secondIndex = timeStr.indexOf(element, nextfrom);
if (secondIndex < 0)

{
return firstIndex; //只出現(xiàn)一次
}

if (secondIndex > 0) //包含2次以上。

{
System.out.println("日期的格式設置有誤!" + element + "在" + timeStr +
"中出現(xiàn)了2次或2次以上,這樣無法分辨");
}
return -1;
}

public static void main(String[] args)

{
TimeFormat timeFormat1 = new TimeFormat();
Calendar tmp = getTime("year年month月day日", "2005年1月5日");

if(tmp!=null)

{
Timestamp whatTime = new Timestamp(tmp.getTimeInMillis());
System.out.println(whatTime);
}
else

{
System.out.println("error found.");
}
}

}
posted on 2005-11-28 17:08
魚上游 閱讀(2703)
評論(4) 編輯 收藏 所屬分類:
爪哇世界探險