kapok

          垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            455 隨筆 :: 0 文章 :: 76 評論 :: 0 Trackbacks
          記事貼4:Java中的日期處理真是爛!
          2005年 02月01日
          Java中Date不好用,建議使用那個名字長的有點變態(tài)的什么Calendar類! 

          我想得到當(dāng)前日期,然后將當(dāng)前日期加上某一個整數(shù),得到下一個日期,我今天在測試過程中發(fā)現(xiàn)Date類不好用,今天是2005-01-14,我想得到前28天的日期,我寫了個方法:
           

          //傳入一個int的時間,經(jīng)和當(dāng)前日期相加或者相減,得到一個新日期
          // public static String strToDateByInt(int i, String operator) {
          //  long j = 0;
          //  long tmp;
          //
          //  Date d = new Date();
          //  
          //  tmp = (long)(d.getTime()/24 * 3600 * 1000);
          //  
          //  if ("-".equals(operator)) {
          //   j = d.getTime() -  i * 24 * 3600 * 1000;
          //   
          //  } else if ("+".equals(operator)) {
          //   j = d.getTime() +  i * 24 * 3600 * 1000;
          //  }
          //  Date a = new Date(j);
          //
          //  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
          //
          //  //  System.out.println(sdf.format(a));
          //  return sdf.format(a);
          //
          // }

          結(jié)果當(dāng)我調(diào)用這個方法時候,得到的結(jié)果竟然是2005-02-07,而這個數(shù)值在25-51之間時結(jié)果就不對(感謝認(rèn)真的測試人員!)。

          不得已,我查了些資料,將方法改寫如下:
           public static String strToDateByInt(int i, String operator) {
            long j = 0;

            Date d = new Date();
            
          //  System.out.println("Y=" + d.getYear() + 1900);
          //  System.out.println("M=" + d.getMonth());
          //  System.out.println("Day=" + d.getDay());
          //  System.out.println("Date=" + d.getDate());
            
            GregorianCalendar gc = new GregorianCalendar();
            gc.setTime(d);
            
            System.out.println(d.getTime());
            
            if ("+".equals(operator)) {
             gc.add(GregorianCalendar.DATE, i);
             
            } else if ("-".equals(operator)) {
             gc.add(GregorianCalendar.DATE, (-i));
            }
            
            Date a = gc.getTime();
            
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            
            return sdf.format(a);

           }

          然后就可以了,其實這樣解決也可以,但是讓我討厭的是這么長的類名,感覺有些變態(tài)!
          而且上面的注釋掉的代碼//  System.out.println("Day=" + d.getDay()); 打印出來并不是日期中的天,而是星期幾!!!!!!!!!!!

          感覺Java開發(fā)真是挺費勁的,而且隨著演化,好像越來越復(fù)雜,今天的輸入法不好用,就寫到這里了!!!

          ltf_ty 于16 : 37 發(fā)表 已被瀏覽66次 評論(2) / 引用(0) 加入博采中心
               注意int與long所能表達(dá)的數(shù)值范圍 [回復(fù)]
             

          結(jié)果當(dāng)我調(diào)用這個方法時候,得到的結(jié)果竟然是2005-02-07,而這個數(shù)值在25-51之間時結(jié)果就不對(感謝認(rèn)真的測試人員!)。
          ————————————————————————
          j = d.getTime() -  (long) i * 24 * 3600 * 1000;
          對j進(jìn)行加減操作時,要注意把i * 24 * 3600 * 1000強(qiáng)制轉(zhuǎn)化為long,這樣就不會出現(xiàn)這個問題了

              zcjl | 2005年 02月28日 17 : 22


               看來是我錯了?:< [回復(fù)]
             

          是我錯了?
          謝謝樓上的朋友!

              兔八哥 | 2005年 02月28日 17 : 44
          posted on 2005-03-09 00:40 笨笨 閱讀(284) 評論(0)  編輯  收藏 所屬分類: J2EEALL
          主站蜘蛛池模板: 建阳市| 万载县| 韶山市| 铅山县| 南乐县| 容城县| 乌苏市| 奉新县| 来凤县| 桃园市| 仙居县| 龙门县| 蒙自县| 台北县| 桦甸市| 保康县| 南召县| 灌阳县| 阳东县| 海安县| 中西区| 西乡县| 谷城县| 滦平县| 富锦市| 绥德县| 颍上县| 师宗县| 潢川县| 沙湾县| 阿拉善盟| 津南区| 长葛市| 雷山县| 崇明县| 岳阳市| 江川县| 临沧市| 尼木县| 鄯善县| 瓦房店市|