<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 61,  comments - 2033,  trackbacks - 0

     


    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)  編輯  收藏 所屬分類: 爪哇世界探險


    FeedBack:
    # re: 格式化任意的時間格式
    2005-11-28 22:04 | pikachu
    為什么不用DateFormat ?  回復  更多評論
      
    # re: 格式化任意的時間格式
    2005-11-29 09:33 | 胡子魚
    DateFormat格式有限,比如: yyyy-mm-dd ,中間只能是相同的“-”,而我這個任意是指:
    1)中間你可以用 “----”,或者“年年”什么的,只要非數(shù)字的都可以,而且長度不限。
    2)這里也可以把 年 月 日 時 分 秒 微秒 的位置任意打亂。

    這個功能主要是根據(jù)需求做出來的。  回復  更多評論
      
    # re: 格式化任意的時間格式
    2005-12-15 08:55 | boss_ch
    不幸的說,上述要求 ,DataFormat 都是可以做到的  回復  更多評論
      
    # re: 格式化任意的時間格式
    2005-12-15 10:07 | 胡子魚
    樓上的朋友,你真的看清楚需求了嗎?
    SimpleDateFormat有類似的,
    但也要經(jīng)過處理才能用。

    比如,用
    SimpleDateFormat dateFormat = new SimpleDateFormat(strPattern);
    dateFormat.applyPattern(strPattern);
    date = dateFormat.parse(strDate);
    也得先處理一下strDate。
      回復  更多評論
      
    <2005年11月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    常用鏈接

    留言簿(82)

    隨筆分類(59)

    文章分類(21)

    相冊

    收藏夾(40)

    GoodSites

    搜索

    •  

    積分與排名

    • 積分 - 1267233
    • 排名 - 22

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 美国免费高清一级毛片| 亚洲国产精品成人久久久| 亚洲国产精品日韩av不卡在线 | 无码国产精品久久一区免费| 无码欧精品亚洲日韩一区| 国产一区二区免费| 亚洲αv在线精品糸列| 少妇性饥渴无码A区免费| 国产l精品国产亚洲区在线观看| 嫩草成人永久免费观看| 亚洲欧洲在线观看| 天天影视色香欲综合免费| 亚洲jjzzjjzz在线观看| 四虎影视大全免费入口| 亚洲av无码专区亚洲av不卡| 国产无遮挡又黄又爽免费视频 | 波多野结衣中文一区二区免费 | 免费人成网站永久| 在线A亚洲老鸭窝天堂| 免费在线看黄网站| 亚洲精品福利网泷泽萝拉| 亚洲中文无码永久免费 | 亚洲av无码一区二区三区乱子伦| 中文字幕久精品免费视频| 久久久国产精品亚洲一区| 久久久久久久免费视频| 亚洲国产成人AV在线播放| 免费大片黄手机在线观看| 日本高清不卡aⅴ免费网站| 亚洲人成网站在线播放影院在线 | 国产最新凸凹视频免费| 中文字幕乱码免费看电影| 亚洲欧洲精品久久| 国产成人无码a区在线观看视频免费| 九一在线完整视频免费观看| 亚洲色四在线视频观看| 国产性生交xxxxx免费| 免费观看在线禁片| 久久精品国产亚洲AV| 亚洲av无码精品网站| 国产视频精品免费|