
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位数字表示的
String tmpStr = timeElementValue[0]+"";
if(tmpStr.length()<4)

{
System.out.println("目前禁止年份是非4位数字表示的,因为我们无法确定到底是哪一年");
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(","); //以逗号隔开的数组.
}

public Calendar getTime(String timeStr)

{
return getTime(format, timeStr);
}


/** *//**year, month, day, hour, minute,second, millisecond
年 月 日 时 分 秒 毫秒
这里暂时假设年份都是显示4位数字,月分和天数都是显示不带前置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日
注意必须用小写的形式,大写的不行,因为用户可能在时间字符串内
也有大小写有区别的其他单词.
**/


/** *//**
如果正确 就返回其出现的位置,如果错误就返回-1.
*/

public static int isTimestampValid(String timeStr, String element)

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

{
return firstIndex;
}

//应经包含了一次。
int nextfrom = firstIndex + element.length();

//已经到了尽头, 不用再找了。
if (nextfrom >= timeStr.length())

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

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

{
return firstIndex; //只出现一次
}

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

{
System.out.println("日期的格式设置有误!" + element + "在" + timeStr +
"中出现了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
鱼上游 阅读(2701)
评论(4) 编辑 收藏 所属分类:
爪哇世界探险