隨筆 - 14, 文章 - 39, 評論 - 17, 引用 - 0
          數(shù)據(jù)加載中……

          2007年2月15日

          TortoiseSVN 配合 Beyond Compare 3 或 WinMerge 的設(shè)置

          日常code工作中,比較麻煩的就是SVN版本沖突時(shí)的Merge了,因?yàn)門ortoiseSVN的比較工具只能比較,不能同時(shí)做Merge,
          一直以來總是在用WinMerge來擴(kuò)展TortoiseSVN本身的Differ,雖然方便很多,但是WinMerge和Beyond Compare 3比起來還是不夠強(qiáng)大,昨天查看了Beyond Compare 3的幫助文檔,試驗(yàn)結(jié)果比較理想,可以告別Merge的痛苦了,;-)。
          TortoiseSVN的設(shè)置如下:
          1.選擇TortoiseSVN-->Settings
           
          2.選擇Diff Viewer的設(shè)置項(xiàng),配置擴(kuò)展比較器的調(diào)用命令,WinMerge和Beyond Compare 3的調(diào)用字符串如下:
          WinMerge:C:\Program Files\WinMerge\WinMergeU.exe -e -x -ub -dl %bname -dr %yname %base %mine
          Beyond Compare 3:C:\Program Files\Beyond Compare 3\BComp.exe %mine %base
           

          posted @ 2009-03-12 22:08 mlw2000 閱讀(1252) | 評論 (0)編輯 收藏

          GMT和PST--關(guān)于時(shí)區(qū)的知識[轉(zhuǎn)]

          GMT和PST--關(guān)于時(shí)區(qū)的知識

          1、概念和換算
          2、日期中的時(shí)區(qū)標(biāo)志
          3、在Oracle 9i中正確轉(zhuǎn)換時(shí)區(qū)
          4、redhat9終端方式下更改時(shí)區(qū)
          5、java下的時(shí)區(qū)......
          GMT和PST--關(guān)于時(shí)區(qū)的知識

          我們在網(wǎng)上瀏覽,在虛擬時(shí)空漫游世界時(shí),經(jīng)常會遇到時(shí)區(qū)的困擾,這篇文章是什么時(shí)間發(fā)布的?郵件是什么時(shí)間發(fā)出的?GMT和PST各代表什么意思,如何換算?等等.
          我通過互聯(lián)網(wǎng)搜集了一些小知識,供大家參考。

          1、概念和換算
          PST - 美國太平洋標(biāo)準(zhǔn)時(shí)間
          GMT 格林威治標(biāo)準(zhǔn)時(shí)間


          幾個(gè)換算公式,因?yàn)槭?4進(jìn)制,看起來有點(diǎn)怪:
          (GMT +8)-16 =PST
          PST+7 = GMT
          PST+16 = GMT + 8(中國)

          我們是東八區(qū),加州是西八區(qū),中間差16個(gè)小時(shí)。

          2、關(guān)于日期中的時(shí)區(qū)標(biāo)志。

          由于都在互聯(lián)網(wǎng)上,大家在各個(gè)時(shí)區(qū)的事件表示有所不同,因此日期要轉(zhuǎn)換到當(dāng)前時(shí)區(qū)的日期和時(shí)間,在互聯(lián)網(wǎng)上,大家一般都用CTS(世界標(biāo)準(zhǔn)時(shí)間)有稱作GMT(格林尼治時(shí)間)。
          譬如日期時(shí)間為:Sat, 30 Mar 2002 13:27:08 -0800,我們當(dāng)前所在的時(shí)區(qū)為正8區(qū)(北京時(shí)間),則用我們所在時(shí)區(qū)表示就是 Sat, 30 Mar 2002 29(13+16):27:08 即Sun, 31 Mar 2002 6:27:08 +8000。 ---??
          目前存在的時(shí)區(qū)有:
          GMT 格林威治標(biāo)準(zhǔn)時(shí)間 GMT
          UTC 全球標(biāo)準(zhǔn)時(shí)間 GMT
          ECT 歐洲中部時(shí)間 GMT+1:00
          EET 東歐時(shí)間 GMT+2:00
          ART (阿拉伯)埃及標(biāo)準(zhǔn)時(shí)間 GMT+2:00
          EAT 東非時(shí)間 GMT+3:00
          MET 中東時(shí)間 GMT+3:30
          NET 近東時(shí)間 GMT+4:00
          PLT 巴基斯坦拉合爾時(shí)間 GMT+5:00
          IST 印度標(biāo)準(zhǔn)時(shí)間 GMT+5:30
          BST 孟加拉國標(biāo)準(zhǔn)時(shí)間 GMT+6:00
          VST 越南標(biāo)準(zhǔn)時(shí)間 GMT+7:00
          CTT 中國臺灣時(shí)間 GMT+8:00
          JST 日本標(biāo)準(zhǔn)時(shí)間 GMT+9:00
          ACT 澳大利亞中部時(shí)間 GMT+9:30
          AET 澳大利亞東部時(shí)間 GMT+10:00
          SST 所羅門標(biāo)準(zhǔn)時(shí)間 GMT+11:00
          NST 新西蘭標(biāo)準(zhǔn)時(shí)間 GMT+12:00
          MIT 中途島時(shí)間 GMT-11:00
          HST 夏威夷標(biāo)準(zhǔn)時(shí)間 GMT-10:00
          AST 阿拉斯加標(biāo)準(zhǔn)時(shí)間 GMT-9:00
          PST 太平洋標(biāo)準(zhǔn)時(shí)間 GMT-8:00
          PNT 菲尼克斯標(biāo)準(zhǔn)時(shí)間 GMT-7:00
          MST 西部山脈標(biāo)準(zhǔn)時(shí)間 GMT-7:00
          CST 中部標(biāo)準(zhǔn)時(shí)間 GMT-6:00
          EST 東部標(biāo)準(zhǔn)時(shí)間 GMT-5:00
          IET 印第安那東部標(biāo)準(zhǔn)時(shí)間 GMT-5:00
          PRT 波多黎各和美屬維爾京群島時(shí)間 GMT-4:00
          CNT 加拿大紐芬蘭時(shí)間 GMT-3:30
          AGT 阿根廷標(biāo)準(zhǔn)時(shí)間 GMT-3:00
          BET 巴西東部時(shí)間 GMT-3:00
          CAT 中非時(shí)間 GMT-1:00

          3、教你怎樣在Oracle 9i中正確轉(zhuǎn)換時(shí)區(qū)

          在Oracle9i之前,雖然有一個(gè)NEW_TIME函數(shù)可以改變DATE的時(shí)間戳部分,但是還沒有專門用來存儲時(shí)區(qū)信息的數(shù)據(jù)類型。在 Oracle9i 中,我們可以使用DBTIMEZONE偽字段查詢數(shù)據(jù)庫的時(shí)區(qū),使用SESSIONTIMEZONE偽字段查詢會話的時(shí)區(qū)。
          但是,對于大多數(shù)數(shù)據(jù)庫,這些值都是-07:00之類的偏移值,因此對于NEW_TIME函數(shù)是沒有用的。Oracle9i有關(guān) NEW_TIME的文檔建議使用FROM_TZ來替代,但是這可能會產(chǎn)生誤導(dǎo)。FROM_TZ只將一個(gè)時(shí)區(qū)應(yīng)用到一個(gè)時(shí)間戳上;它并不能把一個(gè)時(shí)區(qū)轉(zhuǎn)換成 另外一個(gè)時(shí)區(qū)。
          其實(shí)有一個(gè)比較好的方法(從文檔中得到這個(gè)方法可能有點(diǎn)難)。首先,為了完成這個(gè)工作,在正確的時(shí)區(qū)內(nèi)需要一個(gè)TIMESTAMP WITH ZONE數(shù)據(jù)類型。然后,如果你將關(guān)鍵字AT TIME ZONE應(yīng)用到那個(gè)值,它就會自動地調(diào)整為新的時(shí)區(qū)和日期。
          select (timestamp ';2003-04-06 01:59:59'; at time zone ';PDT';) at time zone ';GMT';   from dual;
          06-APR-03 08.59.59.00000000 AM GMT

          這個(gè)語句將為太平洋白天時(shí)間(即其切換到PST之前的時(shí)刻)構(gòu)造一個(gè)TIMESTAMP WITH TIME ZONE然后再將其轉(zhuǎn)換到GMT。AT TIME ZONE關(guān)鍵字也接受默認(rèn)的偏移值語法:
          select (timestamp ';2003-04-06 02:00:00'; at time zone ';-07:00';) at time zone   ';00:00'; from dual;
          06-APR-03 09.00.00.000000000 AM +00:00
          你還可以使用偽字段來自動調(diào)整當(dāng)前會話的時(shí)區(qū):
          select current_timestamp at time zone dbtimezone from dual;
          上面的表達(dá)式返回一個(gè)當(dāng)前會話的本地時(shí)間(數(shù)據(jù)類型為時(shí)區(qū)),重新調(diào)整數(shù)據(jù)庫的時(shí)區(qū),調(diào)整后的時(shí)區(qū)將與SYSTIMESTAMP的結(jié)果相等。有了以上的這些信息,就可以構(gòu)造一個(gè)比較好的NEW_TIME函數(shù):
          create or replace function my_new_time (p_dwtz timestamp with time zone,     p_tz varchar2   ) return date is
          begin
          return cast(p_dwtz at time zone p_tz as date);
          end
          my_new_time;
          /
          show errors;
          select my_new_time(sysdate,';+08:00';) from dual;
          即使第一個(gè)參數(shù)被標(biāo)記為一個(gè)timestamp with time zone,你依然可以傳入一個(gè)TIMESTAMP和DATE,這樣由于Oracle的自動轉(zhuǎn)型操作,得到的時(shí)間將是會話在本地時(shí)區(qū)的當(dāng)前時(shí)間。這個(gè)函數(shù)接 受包括偏移值在內(nèi)的任何可以被TIMESTAMP識別的時(shí)區(qū),然后將接受的時(shí)區(qū)調(diào)整為正確的值。

          posted @ 2009-03-07 12:32 mlw2000 閱讀(2477) | 評論 (0)編輯 收藏

          HTML Escape Characters: Complete List(html轉(zhuǎn)義字符列表)【轉(zhuǎn)】

               摘要: Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&g...  閱讀全文

          posted @ 2008-10-26 16:43 mlw2000 閱讀(2591) | 評論 (1)編輯 收藏

          javascript日期的常用計(jì)算

          其中function addDate()是從網(wǎng)上copy來的:

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
          <HTML>
          <HEAD>
          <TITLE> New Document </TITLE>
          <META NAME="Generator" CONTENT="EditPlus">
          <META NAME="Author" CONTENT="">
          <META NAME="Keywords" CONTENT="">
          <META NAME="Description" CONTENT="">
          <SCRIPT LANGUAGE="JavaScript">
          <!--

          function testAddDate(){
              
          var usedate = document.all("doss_card.usedate").value;    
              
          var work_year = document.all("doss_card.work_year").value;

              
          var tempArry=usedate.split('-');
              
          var date=new Date(tempArry[0],tempArry[1]-1);

              
          var newdate = addDate(6,work_year,date);
              
          var limtyear=newdate.getYear() +'-+ (newdate.getMonth()+1);
              document.all(
          "doss_card.limit_month").value = limtyear;
          }

          function culEndDate(){
              
          var inputDate=document.all("rep_month_plan.start_date").value;
              
          var datePartArray=inputDate.split('-');
              
          //本月開始的第一天
              var curFirstDay=new Date(datePartArray[0],datePartArray[1]-1);
              
          //下月開始的第一天
              var nextFirstDay=addDate('5','1',curFirstDay);
              
          //下下月開始的第一天
              var nnextFirstDay=addDate('5','2',curFirstDay);
              
          //本月最后一天
              var curEndDay= new Date(nextFirstDay.getTime()-1);
              
          //下月最后一天
              var nextEndDay= new Date(nnextFirstDay.getTime()-1);
              
              alert(nextEndDay);
              document.all(
          "rep_month_plan.curEnddate").value=curEndDay.getYear() +'-+  (curEndDay.getMonth()+1+ '-+curEndDay.getDate();
              document.all(
          "rep_month_plan.nextEnddate").value=nextEndDay.getYear() +'-+  (nextEndDay.getMonth()+1+ '-+nextEndDay.getDate();


          }


           
          function addDate(type,NumDay,vdate){
                   
          var date=new Date(vdate);
                  type 
          = parseInt(type) //類型 
                   var lIntval = parseInt(NumDay)//間隔
                      switch(type){
                           
          case 6 ://
                            date.setYear(date.getYear() + lIntval)
                            
          break;
                           
          case 7 ://季度
                            date.setMonth(date.getMonth() + (lIntval * 3) )
                            
          break;
                           
          case 5 ://
                            date.setMonth(date.getMonth() + lIntval)
                            
          break;
                           
          case 4 ://
                            date.setDate(date.getDate() + lIntval)
                            
          break
                           
          case 3 ://時(shí)
                            date.setHours(date.getHours() + lIntval)
                            
          break
                           
          case 2 ://
                            date.setMinutes(date.getMinutes() + lIntval)
                            
          break
                           
          case 1 ://
                            date.setSeconds(date.getSeconds() + lIntval)
                            
          break;
                           
          default:
                      
                    } 
              
          return date;
              
          //return date.getYear() +'-' +  (date.getMonth()+1) + '-' +date.getDate()+ ' '+ date.getHours()+':'+date.getMinutes()+':'+date.getSeconds()
            } 

          //-->

          </SCRIPT>
          </HEAD>
          <FORM METHOD=POST ACTION="">
          doss_card.usedate:
          <INPUT TYPE="text" NAME="doss_card.usedate" value='2007-06'><BR>
          doss_card.work_year:
          <INPUT TYPE="text" NAME="doss_card.work_year" value='6'><BR>
          doss_card.limit_month:
          <INPUT TYPE="text" NAME="doss_card.limit_month"><BR>
          <INPUT TYPE="button" value='計(jì)算日期相加' onclick='testAddDate()'>
          <hr>
          當(dāng)前日期:
          <INPUT TYPE="text" NAME="rep_month_plan.start_date" value='2007-06-12'><BR>
          當(dāng)月末日期:
          <INPUT TYPE="text" NAME="rep_month_plan.curEnddate"><BR>
          下月末日期:
          <INPUT TYPE="text" NAME="rep_month_plan.nextEnddate" ><BR>
          <INPUT TYPE="button" value='計(jì)算月末日期' onclick='culEndDate()'>


          </FORM>
          <BODY>

          </BODY>
          </HTML>

          posted @ 2007-08-21 00:30 mlw2000 閱讀(4914) | 評論 (0)編輯 收藏

          【轉(zhuǎn)】《紫川》評語

          紫川----我最愛的小說!告訴你一個(gè)普通少年在愛情與國家興亡間的感人抉擇,一本讓你看了一遍感動,看了兩遍偶爾心疼,看了三遍非哭不可的小說.這里有世間最真摯的友情,這里有不惜一切的愛情,這里更有超越所有種族的真情,,,有人說紫川是一部史詩,有人說紫川是一部情感的百科全書,還有人說紫川只是流淌在生命中的切許感動..我唯一想說的是:金庸,古龍,老豬

          posted @ 2007-06-27 12:46 mlw2000 閱讀(302) | 評論 (0)編輯 收藏

          Java基礎(chǔ)問題:漢字問題深入談[轉(zhuǎn)]

          一、主題:關(guān)于JAVA的中文問題?
          ??? JAVA的中文問題比較突出,主要表現(xiàn)在控制面板輸出,JSP頁面輸出和數(shù)據(jù)庫訪問上。本文盡量避開字體問題,而只談編碼。通過本文,你可以了解JAVA中文問題的由來,問題的解決方法,其中提了一下用JDBC訪問數(shù)據(jù)庫的方法。?

          二、問題描述:?
          1)在中文W2000中文窗口編譯和運(yùn)行,用的是國際版的JDK,連接的是中文W2000下的Cp936編碼的SQL SERVER數(shù)據(jù)庫:?

          J:exercisedemoencodeHelloWorld>make?
          ?? Created by XCompiler. PhiloSoft All Rights Reserved.?
          ?? Wed May 30 02:54:45 CST 2001?

          J:exercisedemoencodeHelloWorld>run?
          ?? Created by XRunner. PhiloSoft All Rights Reserved.?
          ?? Wed May 30 02:51:33 CST 2001?
          中文?
          [B@7bc8b569?
          [B@7b08b569?
          [B@7860b569?
          中文?
          中文?
          ?????
          中文?
          中文?
          ?????
          ???
          ???
          ???

          2)如果在中文W2000的西文窗口(編碼為437)下編譯,用JAVA運(yùn)行則由于無字體而無法正常顯示,如果象上面一樣在中文W2000的中文窗口運(yùn)行,輸出為:?

          J:exercisedemoencodeHelloWorld>run?
          ?? Created by XRunner. PhiloSoft All Rights Reserved.?
          ?? Wed May 30 02:51:33 CST 2001?
          ?????
          [B@7bc0b66a?
          [B@7b04b66a?
          [B@7818b66a?
          ?????
          ?????
          ?????
          ?????
          ?????
          ?????
          中文?
          中文?
          ?????

          三)分析?

          1)出現(xiàn)有亂碼(也就是?)。由于只出現(xiàn)?而沒出現(xiàn)小方框,說明只是編碼有問題,而不是字體問題。 在編碼中,如果從一種字符集轉(zhuǎn)換到別一種字符集,比較典型的是從GB2312轉(zhuǎn)換到ISO8859_1(即ASCII),那么很多漢字(半個(gè)漢字)是無法映射到西文字符中去的,在這種情形下,系統(tǒng)就把這些字符用?代替。同樣,也存在小字符集無法到大字符集的情況,具體原因這里就不詳談了。?

          2)出現(xiàn)了中文環(huán)境編譯,中文環(huán)境運(yùn)行時(shí)漢字顯示有正確也有不正確的地方,同樣,在西文環(huán)境下編譯,在中文環(huán)境下運(yùn)行時(shí)也出現(xiàn)類似情況。這是由于自動(默認(rèn))或手工(也就new String(bytes[,encode])和bytes getBytes([encode]))轉(zhuǎn)碼的結(jié)果。?

          2.1)在JAVA源文件-->JAVAC-->Class-->Java-->getBytes()-->new String()-->顯示的過程中,每一步都有編碼的轉(zhuǎn)換過程,這個(gè)過程總是存在的,只是有的時(shí)候用默認(rèn)的參數(shù)進(jìn)行。下面我們一步一步分析為什么出現(xiàn)上面的情形。?

          2.2)這里是源代碼:?

          HelloWorld.java:?
          ------------------------?
          public class HelloWorld?
          {?
          ??? public static void main(String[] argv)
          ??? {?
          ??????? try
          ??????? {?
          ??????????? System.out.println("1:"+"中文");
          ??????????? System.out.println("2:"+"中文".getBytes());
          ??????????? System.out.println("3:"+"中文".getBytes("GB2312"));?
          ??????????? System.out.println("4:"+"中文".getBytes("ISO8859_1"));

          ??????????? System.out.println("5:"+new String("中文".getBytes()));//5?
          ??????????? System.out.println("6:"+new String("中文".getBytes(),"GB2312"));?
          ??????????? System.out.println("7:"+new String("中文".getBytes(),"ISO8859_1"));

          ??????????? System.out.println("8:"+new String("中文".getBytes("GB2312")));//8?
          ??????????? System.out.println("9:"+new String("中文".getBytes("GB2312"),"GB2312"));
          ??????????? System.out.println("10:"+new String("中文".getBytes("GB2312"),"ISO8859_1"));

          ??????????? System.out.println("11:"+new String("中文".getBytes("ISO8859_1")));//11?
          ??????????? System.out.println("12:"+new String("中文".getBytes("ISO8859_1"),"GB2312"));
          ??????????? System.out.println("13:"+new String("中文".getBytes("ISO8859_1"),"ISO8859_1"));
          ??????? }?
          ??????? catch(Exception e)
          ??????? {?
          ??????????? e.printStackTrace();?
          ??????? }?
          ? }?
          }?

          為了方便起見,在每個(gè)轉(zhuǎn)換的后面加了操作序號,分別為1,2,...,13。?

          2.3)需要說明的是,JAVAC是以系統(tǒng)默認(rèn)編碼讀入源文件,然后按UNICODE進(jìn)行編碼的。在JAVA運(yùn)行的時(shí)候,JAVA也是采用UNICODE編碼的,并且默認(rèn)輸入和輸出的都是操作系統(tǒng)的默認(rèn)編碼,也就是說在new String(bytes[,encode])中,系統(tǒng)認(rèn)為輸入的是編碼為encode的字節(jié)流,換句話說,如果按encode來翻譯bytes才能得到正確的結(jié)果,這個(gè)結(jié)果最后要在JAVA中保存,它還是要從這個(gè)encode轉(zhuǎn)換成Unicode,也就是說有bytes-->encode字符-->Unicode字符的轉(zhuǎn)換;而在String.getBytes([encode])中,系統(tǒng)要做一個(gè)Unicode字符-->encode字符-->bytes的轉(zhuǎn)換。?

          在這個(gè)例子中,除那個(gè)英文窗口編碼的時(shí)候除外,其實(shí)情形下默認(rèn)編碼都是GBK(在本例中,我們暫且把GBK和GB2312等同看待)。?

          2.4)由于在未指明在上面的兩個(gè)用代碼實(shí)現(xiàn)的轉(zhuǎn)換中,如果未指定encode,系統(tǒng)將采用默認(rèn)的編碼(這里為GBK),我們認(rèn)為上面的5,6,7和8,9,10是一樣的,8和9、11和12也是一樣的,所以我們在討論中將只討論1,9,10,12,13。其中的2,3,4只是用于測試,不在我們的討論范圍之內(nèi)。?

          2.5)下面我們來跟蹤程序中的“中”字的轉(zhuǎn)換歷程,我們先說在中文窗口下作的編譯和運(yùn)行過程,注意在下面的字母下標(biāo)中,我有意識地使用了一些數(shù)字,以表示相同,相異還是相關(guān)2.5.1)我們先以上面的13個(gè)代碼段中的的代碼9為例:?

          步驟 內(nèi)容 地點(diǎn) 說明?
          01: C1 HelloWorld.java C1泛指一個(gè)GBK字符?
          02: U1 JAVAC讀取 U1泛指一個(gè)Unicode字符?
          03: C1 getBytes()第一步 JAVA先和操作系統(tǒng)交流?
          04: B1,B2 getBytes()第二步 然后返回字節(jié)數(shù)組?
          05: C1 new String()第一步 JAVA先和操作系統(tǒng)交流?
          06: U1 new String()第二步 然后返回字符?
          07: C1 println(String) 能顯示“中”字,內(nèi)容和原來的相同?

          2.5.2)然后再以代碼段10為例,我們注意到只是:?

          步驟 內(nèi)容 地點(diǎn) 說明?
          01: C1 HelloWorld.java C1泛指一個(gè)GBK字符?
          02: U1 JAVAC讀取 U1泛指一個(gè)Unicode字符?
          03: C1 getBytes()第一步 JAVA先和操作系統(tǒng)交流?
          04: B1,B2 getBytes()第二步 然后返回字節(jié)數(shù)組?
          05: C3,C4 new String()第一步 JAVA先和操作系統(tǒng)交流,這時(shí)解析錯誤?
          06: U5,U6 new String()第二步 然后返回字符?
          07: C3,C4 println(String) 由于中字給分成了兩半,在ISO8859_1中剛好也沒有字符?

          能映射上,所以顯示為“??”。在上面的示例中,?
          “中文”兩個(gè)字就顯示為“????”?
          2.5.3)在完全中文模式下的其它情形類似,我就不多說了?

          2.6)我們接著看為什么在西文DOS窗口下編譯出來的類在中文窗口下也出現(xiàn)類似情形,特別是為什么居然有的情形下還能正確顯示漢字。?

          2.6.1)我們還是先以代碼段9為例:?

          步驟 內(nèi)容 地點(diǎn) 說明?
          01: C1C2 HelloWorld.java C1C2分別泛指一個(gè)ISO8859_1字符,“中”字被拆開?
          02: U3U4 JAVAC讀取 U1U2泛指一個(gè)Unicode字符?
          03: C5C6 getBytes()第一步 JAVA先和操作系統(tǒng)交流,這時(shí)解析錯誤?
          04: B5B6B7B8 getBytes()第二步 然后返回字節(jié)數(shù)組?
          05: C5C6 new String()第一步 JAVA先和操作系統(tǒng)交流?
          06: U3U4 new String()第二步 然后返回字符?
          07: C5C6 println(String) 雖然同是兩個(gè)字符,但已不是最初的“兩個(gè)ISO8859_1字?

          符”,而是“兩個(gè)BGK字符”,“中”顯示成了“??”?
          而“中文”就顯示成了“????”?

          2.6.2)下面我們以代碼段12為例,因?yàn)樗苷_顯示漢字?

          步驟 內(nèi)容 地點(diǎn) 說明?

          01: C1C2 HelloWorld.java C1C2分別泛指一個(gè)ISO8859_1字符,“中”字被拆開?
          02: U3U4 JAVAC讀取 U1U2泛指一個(gè)Unicode字符
          03: C1C2 getBytes()第一步 JAVA先和操作系統(tǒng)交流(注意還是正確的哦!)?
          04: B5B6 getBytes()第二步 然后返回字節(jié)數(shù)組(這是很關(guān)鍵的一步!)?
          05: C12 new String()第一步 JAVA先和操作系統(tǒng)交流(這是更關(guān)鍵的一步,JAVA已經(jīng)知道B5B6要解析成一個(gè)漢字!)?
          06: U7 new String()第二步 然后返回字符(真是一個(gè)項(xiàng)兩!U7包含了U3U4的信息)?
          07: C12 println(String) 這就原來的“中”字,很委屈被JAVAC冤枉了一回,不過被程序員撥亂反正了一下!當(dāng)然,“中文”兩個(gè)字都能正確顯示了!?

          3)那為什么有的時(shí)候用JDBC的?
          new String(Recordset.getBytes(int)[,encode])?
          Recordset.getSting(int)?
          Recordset.setBytes(String.getBytes([encode]))?
          和?
          Recordset.setString(String)?
          的時(shí)候會出現(xiàn)亂碼了呢??

          其實(shí)問題就出現(xiàn)在編寫JDBC的的也考慮了編碼問題,它從數(shù)據(jù)庫讀取數(shù)據(jù)后,可能自作主張做了一個(gè)從GB2312(默認(rèn)編碼)到Unicode的轉(zhuǎn)換,我的這個(gè)WebLogic For SQL Server的JDBC Driver就是這樣的,當(dāng)我讀字串的時(shí)候,發(fā)出讀到的不是正確的漢字,可恨的是我卻可以直接寫漢字字串,這讓人多少有點(diǎn)難以接受!?
          也就是說,我們不得不在讀或?qū)懙臅r(shí)候進(jìn)行轉(zhuǎn)碼,盡管這個(gè)轉(zhuǎn)碼有的時(shí)候不是那么明顯,這是因?yàn)槲覀兪褂昧四J(rèn)的編碼進(jìn)行轉(zhuǎn)碼。JDBC Driver所做的操作,我們只有進(jìn)入到源代碼內(nèi)部才能清楚,大家認(rèn)為呢?

          posted @ 2007-03-21 09:18 mlw2000 閱讀(409) | 評論 (0)編輯 收藏

          如何修改eclipse中的"Mark occurence highlight colour"(即“標(biāo)記當(dāng)前高亮”的顏色)[轉(zhuǎn)]

          搜了半天終于找到了:
          Hi

          The 'mark occurences' feature is really useful, unfortunately it is a light shade of yellow and the window colour is a light beige, therefore it doesn't show up. The only way I can find the occurences is to move my mouse cursor up and down the margin until it becomes a hand.

          I have looked all through all the preferences and I can't see how to change that colour. Is it a system colour, or FDT, and is it actually possible to change?

          Any help gratefully appreciated.
          Jake


          ============================================================
          Here is the way you can change the color:

          1. Select the Menu Window->Preferences
          2. Select in the tree General->Editors->Text Editors->Annotations
          3. Select AS Occurence
          4. At the right there is a small Button Color, klick it and select a new color.


          剛剛試過,eclipse 3.20能用此方法修改

          posted @ 2007-03-17 00:31 mlw2000 閱讀(2430) | 評論 (6)編輯 收藏

          關(guān)于讀取文件內(nèi)容時(shí)報(bào)sun.io.MalformedInputException的問題 [轉(zhuǎn)]

          在網(wǎng)上找到的原因是這樣的:
          這個(gè)問題產(chǎn)生的原因是IBM在JDK 1.4版本中為了追求對io通道的高效率改變了JDK 1.3中對io通道中異常處理的策略。IBM JDK 1.4中對于io通道的異常處理更加嚴(yán)格,因此系統(tǒng)中會報(bào)上面的錯誤。
          解決這一問題的辦法是不使用IBM JDK 1.4中默認(rèn)的io通道,而使用nio通道。具體的做法如下:
          1.打開管理控制臺,找到并選擇運(yùn)行這個(gè)JSP的應(yīng)用服務(wù)器
          2.依次選擇進(jìn)程定義,java虛擬機(jī),一般JVM自變量
          3.添加-Dibm.stream.nio=true
          4.確定,保存
          5.重新啟動該服務(wù)器

          本來我就懷疑又是IBM JDK的問題,果然被我不幸言中了,再次表示一下郁悶!

          我發(fā)現(xiàn)在我需要讀取的文件當(dāng)中存在這樣的一些亂碼字符

          我原來是用下面這段程序讀取這個(gè)文件的內(nèi)容并打印的:
          FileReader fr = new FileReader(file);
          BufferedReader br = new BufferedReader(fr);
          String str="";
          String result = "";
          while((str=br.readLine())!=null){
              result += str + "\n";
          }
          即逐行讀取的方法,我想也是一般的方法,但是就是這個(gè)readline方法導(dǎo)致了IBM JDK 1.4.2 報(bào)了這個(gè)sun.io.MalformedInputException的問題.

          我現(xiàn)在使用的解決方法如下:
          String result = "";
          StringBuffer sBuffer=new StringBuffer();
          FileInputStream fis=new FileInputStream(file);
          BufferedInputStream bis=new BufferedInputStream(fis);
          String tempStr;
          byte[] b = new byte[1024];
          int i = 0;
          while ((i = bis.read(b)) > 0) {
              tempStr=new String(b,0,i);
              sBuffer.append(tempStr);
          }
          result = sBuffer.toString();

          即逐字節(jié)讀取的方法.這樣處理就可以正常讀取了!

          具體到底為什么會出現(xiàn)這種問題現(xiàn)在還沒弄明白,估計(jì)也弄不明白了!

          posted @ 2007-03-01 10:08 mlw2000 閱讀(3762) | 評論 (4)編輯 收藏

          Oracle關(guān)于時(shí)間/日期的操作 (轉(zhuǎn))

          Oracle關(guān)于時(shí)間/日期的操作

          1.日期時(shí)間間隔操作

          當(dāng)前時(shí)間減去7分鐘的時(shí)間
          select? sysdate,sysdate - interval '7' MINUTE? from dual
          當(dāng)前時(shí)間減去7小時(shí)的時(shí)間
          select? sysdate - interval '7' hour? from dual
          當(dāng)前時(shí)間減去7天的時(shí)間
          select? sysdate - interval '7' day? from dual
          當(dāng)前時(shí)間減去7月的時(shí)間
          select? sysdate,sysdate - interval '7' month from dual
          當(dāng)前時(shí)間減去7年的時(shí)間
          select? sysdate,sysdate - interval '7' year?? from dual
          時(shí)間間隔乘以一個(gè)數(shù)字
          select? sysdate,sysdate - 8 *interval '2' hour?? from dual

          2.日期到字符操作
          select? sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')? from dual
          select? sysdate,to_char(sysdate,'yyyy-mm-dd hh:mi:ss')? from dual
          select? sysdate,to_char(sysdate,'yyyy-ddd hh:mi:ss')? from dual
          select? sysdate,to_char(sysdate,'yyyy-mm iw-d hh:mi:ss')? from dual
          ?? 參考o(jì)racle的相關(guān)關(guān)文檔(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)

          3. 字符到日期操作
          select? to_date('2003-10-17 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual
          具體用法和上面的to_char差不多。

          4. trunk/ ROUND函數(shù)的使用
          select? trunc(sysdate ,'YEAR')? from dual
          select? trunc(sysdate )? from dual
          select? to_char(trunc(sysdate ,'YYYY'),'YYYY')? from? dual

          5.oracle有毫秒級的數(shù)據(jù)類型
          --返回當(dāng)前時(shí)間 年月日小時(shí)分秒毫秒
          select to_char(current_timestamp(5),'DD-MON-YYYY HH24:MI:SSxFF') from dual;
          --返回當(dāng)前 時(shí)間的秒毫秒,可以指定秒后面的精度(最大=9)
          select to_char(current_timestamp(9),'MI:SSxFF') from dual;

          6.計(jì)算程序運(yùn)行的時(shí)間(ms)
          declare
          ??? type rc is ref cursor;
          ??? l_rc rc;
          ??? l_dummy all_objects.object_name%type;
          ??? l_start number default dbms_utility.get_time;
          begin
          ??? for? I? in 1 .. 1000
          ??? loop
          ??????? open l_rc for
          ????????? 'select object_name? from all_objects '||

          'where object_id = ' || i;
          ??????? fetch l_rc into l_dummy;
          ??????? close l_rc;
          ??? end loop;
          ??? dbms_output.put_line
          ??? ( round( (dbms_utility.get_time-l_start)/100, 2 ) ||
          ????? ' seconds...' );
          end;

          posted @ 2007-02-15 16:04 mlw2000 閱讀(231) | 評論 (0)編輯 收藏

          DB2中有關(guān)日期和時(shí)間的函數(shù),及應(yīng)用(轉(zhuǎn))

          DAYNAME?????????返回一個(gè)大小寫混合的字符串,對于參數(shù)的日部分,用星期表示這一天的名稱(例如,F(xiàn)riday)。??
          DAYOFWEEK????返回參數(shù)中的星期幾,用范圍在?1-7?的整數(shù)值表示,其中?1?代表星期日。??
          DAYOFWEEK_ISO?返回參數(shù)中的星期幾,用范圍在?1-7?的整數(shù)值表示,其中?1?代表星期一。??
          DAYOFYEAR??????????返回參數(shù)中一年中的第幾天,用范圍在?1-366?的整數(shù)值表示。??
          DAYS?????????????????????返回日期的整數(shù)表示。??
          JULIAN_DAY?????????返回從公元前?4712?年?1?月?1?日(儒略日歷的開始日期)到參數(shù)中指定日期值之間的天數(shù),用整數(shù)值表示。??
          MIDNIGHT_SECONDS??返回午夜和參數(shù)中指定的時(shí)間值之間的秒數(shù),用范圍在?0?到?86400?之間的整數(shù)值表示。??
          MONTHNAME???????????????對于參數(shù)的月部分的月份,返回一個(gè)大小寫混合的字符串(例如,January)。??
          TIMESTAMP_ISO?????????根據(jù)日期、時(shí)間或時(shí)間戳記參數(shù)而返回一個(gè)時(shí)間戳記值。??
          TIMESTAMP_FORMAT?從已使用字符模板解釋的字符串返回時(shí)間戳記。??
          TIMESTAMPDIFF????????根據(jù)兩個(gè)時(shí)間戳記之間的時(shí)差,返回由第一個(gè)參數(shù)定義的類型表示的估計(jì)時(shí)差。??
          TO_CHAR???????????????????返回已用字符模板進(jìn)行格式化的時(shí)間戳記的字符表示。TO_CHAR?是?VARCHAR_FORMAT?的同義詞。??
          TO_DATE??????????????????從已使用字符模板解釋過的字符串返回時(shí)間戳記。TO_DATE?是?TIMESTAMP_FORMAT?的同義詞。??
          WEEK?????????????????????返回參數(shù)中一年的第幾周,用范圍在?1-54?的整數(shù)值表示。以星期日作為一周的開始。??
          WEEK_ISO????????????返回參數(shù)中一年的第幾周,用范圍在?1-53?的整數(shù)值表示。

          要使當(dāng)前時(shí)間或當(dāng)前時(shí)間戳記調(diào)整到?GMT/CUT,則把當(dāng)前的時(shí)間或時(shí)間戳記減去當(dāng)前時(shí)區(qū)寄存器:?
          current?time?-?current?timezone?
          current?timestamp?-?current?timezone?

          給定了日期、時(shí)間或時(shí)間戳記,則使用適當(dāng)?shù)暮瘮?shù)可以單獨(dú)抽取出(如果適用的話)年、月、日、時(shí)、分、秒及微秒各部分:?
          YEAR?(current?timestamp)?
          MONTH?(current?timestamp)?
          DAY?(current?timestamp)?
          HOUR?(current?timestamp)?
          MINUTE?(current?timestamp)?
          SECOND?(current?timestamp)?
          MICROSECOND?(current?timestamp)?

          因?yàn)闆]有更好的術(shù)語,所以您還可以使用英語來執(zhí)行日期和時(shí)間計(jì)算:?
          current?date?+?1?YEAR?
          current?date?+?3?YEARS?+?2?MONTHS?+?15?DAYS?
          current?time?+?5?HOURS?-?3?MINUTES?+?10?SECONDS?

          從時(shí)間戳記單獨(dú)抽取出日期和時(shí)間也非常簡單:?
          DATE?(current?timestamp)?
          TIME?(current?timestamp)

          而以下示例描述了如何獲得微秒部分歸零的當(dāng)前時(shí)間戳記:?

          CURRENT?TIMESTAMP?-?MICROSECOND?(current?timestamp)?MICROSECONDS?

          如果想將日期或時(shí)間值與其它文本相銜接,那么需要先將該值轉(zhuǎn)換成字符串。為此,只要使用?CHAR()?函數(shù):?

          char(current?date)?
          char(current?time)?
          char(current?date?+?12?hours)?

          要將字符串轉(zhuǎn)換成日期或時(shí)間值,可以使用:?

          TIMESTAMP?('2002-10-20-12.00.00.000000')?
          TIMESTAMP?('2002-10-20?12:00:00')?
          DATE?('2002-10-20')?
          DATE?('10/20/2002')?
          TIME?('12:00:00')?
          TIME?('12.00.00')?

          TIMESTAMP()、DATE()?和?TIME()?函數(shù)接受更多種格式。上面幾種格式只是示例,我將把它作為一個(gè)練習(xí),讓讀者自己去發(fā)現(xiàn)其它格式。?

          有時(shí),您需要知道兩個(gè)時(shí)間戳記之間的時(shí)差。為此,DB2?提供了一個(gè)名為?TIMESTAMPDIFF()?的內(nèi)置函數(shù)。但該函數(shù)返回的是近似值,因?yàn)樗豢紤]閏年,而且假設(shè)每個(gè)月只有?30?天。以下示例描述了如何得到兩個(gè)日期的近似時(shí)差:?

          timestampdiff?(<n>,?char(?
          timestamp('2002-11-30-00.00.00')-?
          timestamp('2002-11-08-00.00.00')))?

          對于?<n>,可以使用以下各值來替代,以指出結(jié)果的時(shí)間單位:?

          1?=?秒的小數(shù)部分??
          2?=?秒??
          4?=?分??
          8?=?時(shí)??
          16?=?天??
          32?=?周??
          64?=?月??
          128?=?季度??
          256?=?年??
          當(dāng)日期很接近時(shí)使用?timestampdiff()?比日期相差很大時(shí)精確。如果需要進(jìn)行更精確的計(jì)算,可以使用以下方法來確定時(shí)差(按秒計(jì)):?

          (DAYS(t1)?-?DAYS(t2))?*?86400?+???
          (MIDNIGHT_SECONDS(t1)?-?MIDNIGHT_SECONDS(t2))?

          為方便起見,還可以對上面的方法創(chuàng)建?SQL?用戶定義的函數(shù):?

          CREATE?FUNCTION?secondsdiff(t1?TIMESTAMP,?t2?TIMESTAMP)?
          RETURNS?INT?
          RETURN?(?
          (DAYS(t1)?-?DAYS(t2))?*?86400?+???
          (MIDNIGHT_SECONDS(t1)?-?MIDNIGHT_SECONDS(t2))?
          )?
          @?

          如果需要確定給定年份是否是閏年,以下是一個(gè)很有用的?SQL?函數(shù),您可以創(chuàng)建它來確定給定年份的天數(shù):?

          CREATE?FUNCTION?daysinyear(yr?INT)?
          RETURNS?INT?
          RETURN?(CASE?(mod(yr,?400))?WHEN?0?THEN?366?ELSE??
          ????????CASE?(mod(yr,?4))???WHEN?0?THEN??
          ????????CASE?(mod(yr,?100))?WHEN?0?THEN?365?ELSE?366?END??
          ????????ELSE?365?END?
          END)@?

          最后,以下是一張用于日期操作的內(nèi)置函數(shù)表。它旨在幫助您快速確定可能滿足您要求的函數(shù),但未提供完整的參考。有關(guān)這些函數(shù)的更多信息,請參考?SQL?參考大全。?

          SQL?日期和時(shí)間函數(shù)??
          DAYNAME?返回一個(gè)大小寫混合的字符串,對于參數(shù)的日部分,用星期表示這一天的名稱(例如,F(xiàn)riday)。??
          DAYOFWEEK?返回參數(shù)中的星期幾,用范圍在?1-7?的整數(shù)值表示,其中?1?代表星期日。??
          DAYOFWEEK_ISO?返回參數(shù)中的星期幾,用范圍在?1-7?的整數(shù)值表示,其中?1?代表星期一。??
          DAYOFYEAR?返回參數(shù)中一年中的第幾天,用范圍在?1-366?的整數(shù)值表示。??
          DAYS?返回日期的整數(shù)表示。??
          JULIAN_DAY?返回從公元前?4712?年?1?月?1?日(儒略日歷的開始日期)到參數(shù)中指定日期值之間的天數(shù),用整數(shù)值表示。??
          MIDNIGHT_SECONDS?返回午夜和參數(shù)中指定的時(shí)間值之間的秒數(shù),用范圍在?0?到?86400?之間的整數(shù)值表示。??
          MONTHNAME?對于參數(shù)的月部分的月份,返回一個(gè)大小寫混合的字符串(例如,January)。??
          TIMESTAMP_ISO?根據(jù)日期、時(shí)間或時(shí)間戳記參數(shù)而返回一個(gè)時(shí)間戳記值。??
          TIMESTAMP_FORMAT?從已使用字符模板解釋的字符串返回時(shí)間戳記。??
          TIMESTAMPDIFF?根據(jù)兩個(gè)時(shí)間戳記之間的時(shí)差,返回由第一個(gè)參數(shù)定義的類型表示的估計(jì)時(shí)差。??
          TO_CHAR?返回已用字符模板進(jìn)行格式化的時(shí)間戳記的字符表示。TO_CHAR?是?VARCHAR_FORMAT?的同義詞。??
          TO_DATE?從已使用字符模板解釋過的字符串返回時(shí)間戳記。TO_DATE?是?TIMESTAMP_FORMAT?的同義詞。??
          WEEK?返回參數(shù)中一年的第幾周,用范圍在?1-54?的整數(shù)值表示。以星期日作為一周的開始。??
          WEEK_ISO?返回參數(shù)中一年的第幾周,用范圍在?1-53?的整數(shù)值表示。

          posted @ 2007-02-15 15:25 mlw2000 閱讀(1701) | 評論 (1)編輯 收藏

          主站蜘蛛池模板: 肥城市| 米脂县| 千阳县| 迁安市| 华宁县| 吉首市| 城步| 科尔| 乌鲁木齐市| 塔城市| 台中县| 玛曲县| 奉贤区| 额济纳旗| 弥渡县| 肥城市| 雷波县| 罗定市| 望都县| 天柱县| 乌恰县| 永城市| 叶城县| 扬州市| 红河县| 鄂尔多斯市| 日喀则市| 闵行区| 禹城市| 岳普湖县| 图们市| 巴中市| 上蔡县| 长岛县| 平南县| 宜州市| 崇左市| 全椒县| 满洲里市| 彰化县| 封开县|