在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

Delphi系列的Y2K問題

Delphi系列的Y2K問題

更新時間:2022-05-08 文章作者:未知 信息來源:網絡 閱讀次數:

Delphi發展至今,已經是第五版本了。盡管各個版本有大大小小的Bug,但疵不掩暇,她還是贏得了廣大程序員和編程愛好者的追隨和愛戴。隨著2000年的逼近, Y2K的一系列問題和各種解決方案也就隨之提到日程上來。對編程者來說,我們現在關心的焦點是:Delphi系列有沒有Y2K問題呢?

---- 答案當然是肯定的。從 Delphi4 起,Inprise 公司就在系統單元 Sysutils. pas(dcu)中增加了TwoDigitCenturyWindow 這一關鍵詞。它表示從當前年份起加到兩位數的年份的數值,缺省為50(年),也就是說允許Y2K拖后50年才發生。可以這樣舉一簡單的例子:

---- 當前日期為 1999年,調用 FormatDatetime(LongdateFormat,'20-11-04') 為 2020年11月4日。而 FormatDatetime(LongdateFormat,'50-11-04') 卻為 1950年 11月4日 而不是 2050 年11月4日。

---- 因此,現在的Y2K問題方案只是在爭取時間,而沒有徹底解決. 理想的解答是到了 2000年,年份的輸入和表示應該是4位數,而不是兩位,這樣才能除去世紀之交的二義性。

---- 沿著這一思路 Delphi5中最重要的插件 MIDAS 3.X(多層分布式應用服務),也是建立在這一時間差基礎之上的,它往往和 BDE 的Y2K 修正日期范圍聯系在一起。需要注意的是:運行時(RTL)控件,Inspire 建議在日期多應用場合,如出生登記,到期付款憑證等事務處理應用時,可根據自己的實際需要來設定(TwoDigitCenturyWindow) 這一初始值,最好實在窗口建立時,及 OnCreate 事件里面設置。Inprise 建議用 100年的世紀窗口(the century window)(相對2000年以前),大部分程序員都喜歡這樣設 TwoDigitYearCenturyWindow := CurrentYear - 1950。

---- 100年的世紀窗口(the century window)應作如下解釋 :

---- 設 TwoDigitCenturyWindow := 20,那么從現在起,時間支持是20年,其中80年應為過去時間。如:當前時間是 1999年,FormatDatetime(LongdateFormat,'18-11-04') 為 2018年11月4日,超過了期限,FormatDatetime(LongdateFormat,'20-11-04') 為 1920年11月4日。

---- 在標準控件中,與日期輸入有關的插件是 TMaskEdit.及其派生的子類。TdateTimePicker 插件在沒有安裝最新的微軟 Visual Dev 6.0 以前,到了2000年2月29日時,不能顯示正確的日期。另外由于操作系統的原因,COMCTL32.DLL如果不更新到 4.72.2106.4 版本(及以后),那么在 NT 4 或視窗 95 操作系統上,TdateTimePicker 將會用1752 替換所有的奇數。

---- 在數據庫控件中,漏斗和過濾(Filter)函數將 '00-1-1' 轉換到 ’1900-1-1', 在用 Locate 指令時,'00-1-1' 到 '99-1-1'期間將被轉換成 '20XX-1-11','30-1-1' 到 '99-1-1' 期間將被轉換到 '19XX-1-1'.原因是 Locate 使用變數(variants)進行定位,日期定位并被沒有通過 Delphi 的運行時庫進行,而是調用了 WIN32 API 函數轉換到日期類型。這是由于 OLE 自動服務器對象的 OLE 字串轉換到日期類型的規則造成的。尤其是當你調VarToDateTime 函數去試圖從一包含日期的字串分離出 TDateTime 類型時。一些數據庫操作在內部使用變體來提取實際數據,TDataset.Locate 和 Tparams 類將依照 OLE 變體轉換規則來實施具體操作,而非通過Delphi的"字串-日期"轉換過程。

---- 因此,Delphi IDE 環境和 DBExplorer 都在安裝時設定了50 年的世紀窗口,其設定對獨立運行的 SQL Explorer.exe 也有效,在數據瀏覽時的"2-4"年份轉換都是這樣設定. 不過,這些值是可以修改的。IDE 的注冊表項為

"HKEY_CURRENTUSER\Software\Borland\Delphi\4.x\
Globals\TwoDigitYearCenturyWindow".
DBExplorer.EXE 的注冊表項為
"HKEY_CURRENTUSER\Software\Borland\Database Explorer\
2.x\DBXForm\TwoDigitYearCenturyWindow".

---- 如果將TwoDigitYearCenturyWindow變為0,那么 Delphi3、Delphi4、Delphi5 對日期的解釋都將一模一樣只處理兩位數年份。
---- J-MIDAS (Java Midas) 和 J-TClientDataSet 是依靠 JBUILDER 引擎對日期格式進行解釋,所以對兩位數的年份,JBUILDER 只保留了 20 年的有效期。

---- 現在回頭來看一下 Delphi 3。由于先天不足,對仍還在使用他的程序員們來說,多少是有些失望。不過,如果進行一番改造,再把 BDE 升級到 5.1 以上,或用 ADO 2.1 代替 BDE,還是可以正常在低檔機上披星戴月,披掛上陣。

----   我們先看一下 Delphi 3 中對年份處理的 EraToYear 函數。該函數返回一符號整形值。定義如下:

function EraToYear(Year: Integer): Integer;
begin
if SysLocale.PriLangID = LANG_KOREAN then
begin
if Year <= 99 then
Inc(Year, (CurrentYear + Abs
(EraYearOffset)) div 100 * 100);
if EraYearOffset > 0 then
EraYearOffset := -EraYearOffset;
end
else
Dec(EraYearOffset);
Result := Year + EraYearOffset;
end;

---- 我們看到,Delphi 對 2000 年并未加以考慮,其中 Year 獲取年份的后兩位。這樣的話,到了2000 年,日期將回到從前。故而,必須將此函數加以修改,以便使我們的日期轉換能通過2000 年。首先,按照 Delphi 一貫的兼容性做法,應該在單元頭部聲明一 TwoDigitCenturyWindow 的 Byte 變量。在單元初試化時(initialization),把其附值為 50。其次,對 EraToYear 做如下改動:
function EraToYear(Year: Integer): Integer;
begin
if SysLocale.PriLangID = LANG_KOREAN then
begin
if Year <= 99 then
Begin
if Year > TwoDigitYearCenturyWindow then
Inc(Year, (CurrentYear + Abs(EraYearOffset))
div 100 * 100)
else
Inc(Year, (2000 + Abs(EraYearOffset))
div 100 * 100);
end;
if EraYearOffset > 0 then
EraYearOffset := -EraYearOffset;
end
else
Dec(EraYearOffset);
Result := Year + EraYearOffset;
end;


---- 然后對 ScanDate 函數做相應的處理,以使其適應 2000 年過度。
function ScanDate(const S: string; var Pos: Integer;
var Date: TDateTime): Boolean;
var
DateOrder: TDateOrder;
N1, N2, N3, Y, M, D: Word;
EraName : string;
EraYearOffset: Integer;

.....

begin
Y := 0;
M := 0;
D := 0;
Result := False;
DateOrder := GetDateOrder(ShortDateFormat);
EraYearOffset := 0;
if ShortDateFormat[1] = 'g' then
// skip over prefix text
begin
ScanToNumber(S, Pos);
EraName := Trim(Copy(S, 1, Pos-1));
EraYearOffset := GetEraYearOffset(EraName);
end
else
if AnsiPos('e', ShortDateFormat) > 0 then
EraYearOffset := EraYearOffsets[1];
if not (ScanNumber(S, Pos, N1) and ScanChar(S,
Pos, DateSeparator) and
ScanNumber(S, Pos, N2)) then Exit;
if ScanChar(S, Pos, DateSeparator) then
begin
if not ScanNumber(S, Pos, N3) then Exit;
case DateOrder of
if not ScanNumber(S, Pos, N3) then Exit;
case DateOrder of
doMDY: begin Y := N3; M := N1; D := N2; end;
doDMY: begin Y := N3; M := N2; D := N1; end;
doYMD: begin Y := N1; M := N2; D := N3; end;
end;
if EraYearOffset > 0 then Y := EraToYear(Y);

{ 在這里 Century Window 發揮作用 }
if Y <= 99 then
Begin
if Y > TwoDigitYearCenturyWindow then
Inc(Y, CurrentYear div 100 * 100)
else
Inc(Y, 2000);
end;
end else
.....


---- 由此,Delphi 3 已經可以渡過 2000 年了,不過,Inprise 建議 Delphi 3 的版本為 3.02。如果是 3.0 極其以下(不支持 MIDAS 1.,X) 象Delphi 1.x(16位)、Delphi 2.x(32位)不如直接升級到 Delphi 4.02. 有條件的愛好者用 Delphi 5 就更好了。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 国产 日韩 亚洲 欧美| 粉嫩av一区二区三区天美传媒| 免费无码国产v片在线观看| 欧美 日韩 亚洲 一区| 国产精品亚洲αv天堂无码| 成人在线观看a| 中文字幕线观看| 国产欧美123| 熟妇人妻va精品中文字幕| 日本中文字幕二区| 91动漫在线看| 天堂av在线网站| 精品免费久久久久久久| 色诱视频在线观看| 老司机午夜网站| 日韩av一二三四| 成年丰满熟妇午夜免费视频| 国产一区二区视频免费在线观看| 日韩a一级欧美一级| 老太脱裤让老头玩ⅹxxxx| 超碰在线播放91| 亚洲天堂第一区| 欧美日韩在线成人| 91传媒免费视频| 色天使在线观看| 无码人妻丰满熟妇区96| 免费看av软件| 精品少妇无遮挡毛片| 日韩精品在线中文字幕| 亚洲精品综合在线观看| 日韩少妇内射免费播放18禁裸乳| 在线免费黄色小视频| 熟女少妇精品一区二区| 少妇人妻大乳在线视频| 国产成年人在线观看| 热久久精品免费视频| 丰满少妇久久久| www国产无套内射com| 亚洲av无日韩毛片久久| 天堂在线资源视频| 337p粉嫩大胆噜噜噜鲁| 青春草国产视频| 久久久久久久久久久久久国产| 色播五月综合网| 50路60路老熟妇啪啪| 国产白丝袜美女久久久久| 青青草视频在线视频| 青青草原国产免费| 成 人 黄 色 小说网站 s色| 欧美日韩亚洲自拍| 日本精品免费在线观看| 女人天堂av手机在线| 久久99中文字幕| 青青青青在线视频| 免费高清一区二区三区| 97超碰在线视| 成人在线视频一区二区三区| 中文字幕在线中文| japanese在线播放| 美女av免费观看| 亚洲国产精品无码av| 久久亚洲中文字幕无码| 男人用嘴添女人下身免费视频| 免费毛片网站在线观看| 黄色片视频在线免费观看| 国产美女三级视频| 成人黄色一区二区| 久久久久久久久久一区二区| 亚洲男人天堂2021| 一区二区三区四区免费观看| 黄网站色视频免费观看 | 国产精品igao| 天天爽夜夜爽一区二区三区| 成人日韩在线视频| 日韩视频在线免费播放| 被灌满精子的波多野结衣| 国产精品又粗又长| 91黄色小网站| 亚洲精品成人在线播放| www.亚洲成人网| 国产精品久久中文字幕| 手机在线看福利| 影音先锋男人的网站| 成人一区二区免费视频| 日韩一级理论片| 黄色www在线观看| 日韩国产欧美亚洲| 福利片一区二区三区| 久青草视频在线播放| 激情内射人妻1区2区3区 | 免费观看美女裸体网站| 欧美日韩在线观看不卡| 日本老太婆做爰视频| 内射国产内射夫妻免费频道| 日韩va在线观看| 欧美一区二区中文字幕| 91精品视频国产| 毛片在线播放视频| 人人爽人人爽av| 日本精品免费在线观看| 精品嫩模一区二区三区| av在线无限看| 国产精品av免费观看| 视色视频在线观看| 精品国产av无码一区二区三区| 色免费在线视频| av日韩一区二区三区| 日韩a一级欧美一级| 哪个网站能看毛片| 国内精品国产三级国产99| 中文字幕国内自拍| 黄色免费视频大全| 日本一级黄视频| 亚洲热在线视频| 美女一区二区三区视频| 欧美极品欧美精品欧美| 色一情一乱一乱一区91| 五月天婷婷在线观看视频| www.超碰com| 成人免费在线小视频| av女优在线播放| 91国在线高清视频| 亚洲国产精品女人| 伊人成人免费视频| 91视频这里只有精品| 香蕉视频网站入口| 欧美视频免费播放| www.亚洲天堂网| 99精品免费在线观看| 无码精品国产一区二区三区免费| 人妻少妇精品无码专区二区 | 久久精品亚洲天堂| 三级一区二区三区| 亚洲天堂av一区二区| 五月天视频在线观看| 想看黄色一级片| 久久人人爽人人片| 在线观看成人免费| 天堂а√在线中文在线| 青草网在线观看| av在线观看地址| aa在线观看视频| 不卡影院一区二区| 手机在线成人免费视频| 三级性生活视频| 一本色道久久88亚洲精品综合| 毛片在线视频观看| 人人妻人人添人人爽欧美一区| 熟女性饥渴一区二区三区| 黄色高清无遮挡| 色天使在线观看| 热这里只有精品| 欧美一级欧美一级| 久久久久免费精品| 亚洲综合伊人久久| 黄色一级片黄色| 成人小视频在线看| 久久出品必属精品| 日韩网站在线免费观看| 国产福利一区视频| 污污的视频免费观看| 成人小视频在线观看免费| heyzo国产| 天天色天天综合网| 老太脱裤让老头玩ⅹxxxx| 久久久久久久久久久久91| 一道本在线观看视频| 116极品美女午夜一级| 久久精品国产99久久99久久久| 日本三级福利片| 六月丁香婷婷在线| 992kp免费看片| 777久久久精品一区二区三区| www.cao超碰| 日韩中文字幕在线视频观看| 国产乱码一区二区三区四区| 免费超爽大片黄| 欧美日韩一区二区三区69堂| 六月婷婷在线视频| 性欧美在线视频| 国产亚洲精品网站| 日韩人妻一区二区三区蜜桃视频| 成熟老妇女视频| 久久综合久久网| 亚洲欧美一区二区三区不卡| 国产情侣av自拍| a级黄色一级片| 黄色网址在线免费看| 欧美午夜aaaaaa免费视频| 欧美一区二区激情| 亚洲国产精品影视| 四季av一区二区三区| 91av在线免费播放| 黄色一级片在线看| 亚洲国产一二三精品无码| 免费av不卡在线| 日日噜噜噜噜久久久精品毛片| 欧美不卡在线播放| 日韩精品在线视频免费观看| 91九色国产ts另类人妖|