org.apache.lucene.document.DateField
該類提供了日期和字符串之間的相互轉(zhuǎn)化,實(shí)際上是 long型和String型的相互轉(zhuǎn)化,轉(zhuǎn)化時(shí)用到了一個(gè)不常用的
Long.toString(long,int);方法。是按指定的方式對(duì)long型進(jìn)行轉(zhuǎn)化
第一個(gè)參數(shù)是要轉(zhuǎn)化的long,第二個(gè)參數(shù)是轉(zhuǎn)化時(shí)候的基數(shù),如果基數(shù)是10就相當(dāng)于方法Long.toString(long);
這里使用的參數(shù)是最大值,即36== 10個(gè)數(shù)字+26個(gè)英文字母。這樣轉(zhuǎn)化出來的字符串長(zhǎng)度比較短,占用比較少的空間,
另外,在轉(zhuǎn)化時(shí),統(tǒng)一了轉(zhuǎn)化后的字符串長(zhǎng)度,如果不足9位(日期的long轉(zhuǎn)化后最高為9位,1970之后的日期可正確轉(zhuǎn)換),
統(tǒng)一長(zhǎng)度后的字符串可以通過比較字符串來比較日期的大小。
日期轉(zhuǎn)化成的字符串類似于
0fev8eza3
本來應(yīng)該是fev8eza3 采取了不足9位補(bǔ)0的方法。
private static int DATE_LEN = Long.toString(1000L*365*24*60*60*1000,
Character.MAX_RADIX).length();
計(jì)算出從1970年開始后1000年的時(shí)間轉(zhuǎn)化為字符串后的長(zhǎng)度,所有轉(zhuǎn)化后的時(shí)間都不應(yīng)超過這個(gè)長(zhǎng)度,如果不足則在前面補(bǔ)0
可以通過字符串轉(zhuǎn)化為日期的函數(shù)計(jì)算出能表示的最大日期為
stringToTime("zzzzzzzzz");
打印出來是 Fri Apr 22 19:04:28 CST 5188
所以該函數(shù)能轉(zhuǎn)化的日期范圍為 1970-1-1~~5188-4-22
日期轉(zhuǎn)化為字符串
public static String timeToString(long time)
字符串轉(zhuǎn)化為日期
public static long stringToTime(String s)
實(shí)際上 函數(shù) LongToString(long i,int radix) 相當(dāng)于 先將i轉(zhuǎn)化為radix進(jìn)制的整數(shù),然后再用函數(shù)
LongToString(i)轉(zhuǎn)化為字符串。所以radix的值應(yīng)該在2--36之間如果不是 則按照10進(jìn)制計(jì)算。
posted on 2008-04-10 19:26 曉宇 閱讀(344) 評(píng)論(0) 編輯 收藏 所屬分類: LUCENE