<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位數字表示的
          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 魚上游 閱讀(2704) 評論(4)  編輯  收藏 所屬分類: 爪哇世界探險


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

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

    比如,用
    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

    搜索

    •  

    積分與排名

    • 積分 - 1267279
    • 排名 - 22

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 女性无套免费网站在线看| 亚洲免费视频观看| 国产男女猛烈无遮档免费视频网站| 无码囯产精品一区二区免费 | a级日本高清免费看| 久久亚洲精品无码av| 亚洲欧洲日产国码在线观看| 亚洲国产成人一区二区三区| 亚洲高清偷拍一区二区三区 | 亚洲中文字幕一区精品自拍| 久久亚洲精品无码aⅴ大香| 亚洲国产另类久久久精品| 亚洲精品色婷婷在线影院| 日韩一区二区免费视频| 一色屋成人免费精品网站| 99免费在线观看视频| 日本免费高清视频| 成人性生交大片免费看中文| 波霸在线精品视频免费观看| jizz在线免费观看| 产传媒61国产免费| 日本高清免费中文在线看| 男男gvh肉在线观看免费| 在线观看亚洲电影| 色偷偷亚洲第一综合网| 成人婷婷网色偷偷亚洲男人的天堂| 国产99在线|亚洲| 亚洲精品国产日韩| 亚洲一级免费视频| 亚洲一区二区三区乱码在线欧洲| 亚洲人成毛片线播放| 亚洲AV无码专区在线亚| 亚洲中文字幕一二三四区苍井空| 亚洲国产成+人+综合| 亚洲一区二区三区深夜天堂| 国产亚洲精品影视在线| 亚洲av永久中文无码精品综合| 亚洲aⅴ天堂av天堂无码麻豆| 亚洲av无码专区国产不乱码| 美女视频黄频a免费| www.av在线免费观看|