domaca stran za letnico izdelki podpora iskanje microsoft com microsoft microsoft dogodki program mcsp sporocila za javnost o microsoftu domaca stran za letnico vodnik po izdelkih pogosto zastavljena vprasanja microsoftova izjava o pripravljenosti bele knjige dodatne informacije microsoftovo informacijsko sredisce za letnico in izjava o pripravljenosti priprava officeovih resitev za letnico kako microsoftovi izdelki obravnavajo stoletja pri obvladovanju tezave z letnico je za razvijalce aplikacij za osebne racunalnike najpomembneje da popolnoma razumejo kako razvijalsko okolje interpretira kratke letnice katero leto se dejansko shrani ce v aplikacijo vnesete kaj pa ce vnesete kako ugotoviti kaksna so pravila ce zelite to bolje razumeti moramo na kratko preleteti zgodovinsko ozadje v svetu bitnega programiranja ima vecina aplikacij notranje podprograme za delo z datumi dvomestna letnica skoraj vedno spada v dvajseto stoletje ce torej vnesete datum bo aplikacija shranila vrednost ocitna tezava tega pristopa je ta da bo aplikacija po prelomu tisocletja interpretirala datum kot ne pa kot ocitno je bila potrebna boljsa resitev zakaj naj bi vsaka aplikacija dolocala pravila obdelovanja datumov ali je bilo samodejno pretvarjanje kratkih letnic v stoletje najboljsi pristop pri novi resitvi je slo za ustvarjanje pravil za obdelovanje datumov ki bi bila vdelana v operacijski sistem in ki bi preslikala datume v trenutno stoletje ta resitev je bila razvita med razvojem programov microsoft visual basic in microsoft office ki je vseboval tudi microsoft access razlicica in vsebuje dve stvari premikanje obdelovanja datumskih pravil iz domene aplikacij v domeno operacijskega sistema z uporabo datoteke oleaut dll iz knjiznice ole automation spremembo v pravilu predvidevanja dvomestne letnice bodo preslikane v trenutno stoletje to pa je definirano s sistemsko uro pozneje je postalo jasno da preslikovanje v trenutno stoletje ni najboljsi pristop knjiznica ole automation je bila posodobljena z novim pravilom z imenom »drseci interval« dvomestna leta med in se preslikajo v stoletje vsa ostala pa v stoletje kot vidite za interpretacijo kratkih let uporabljamo tri razlicna pravila tezava se dodatno zaplete ker celo v isti razlicici orodja za razvoj aplikacij ne morete predpostaviti da veste katero pravilo bo uporabljeno to je zato ker je pravilo definirano v knjiznicah ole automation za bitne operacijske sisteme programu microsoft access je npr prilozena stara knjiznica ole automation ki dvomestne letnice vedno preslika v trenutno stoletje po izidu programa microsoft access je bila knjiznica ole automation posodobljena z novim pravilom ce boste namestili program ki uporablja novo knjiznico boste spremenili nacin interpretacije letnic v svoji aplikaciji v novo knjiznico ole automation ki je bila prilozena stevilnim izdelkom je vdelano novo pravilo »drsecih intervalov« med te izdelke spadajo microsoft internet explorer in novejse razlicice microsoft windows nt service pack microsoft windows nt microsoft windows osr microsoft office microsoft visual basic in drugi izdelki bistveno je da razlicica datoteke oleaut dll in njene novejse razlicice uporabljajo novo pravilo drsecega intervala prejsnje razlicice pa uporabljajo pravilo trenutnega stoletja microsoft excel ni nikoli uporabljal knjiznice ole automation library za obdelavo datumov excel uporablja lastna pravila ki so odvisna od razlicice ki jo uporabljate v excelu je vdelan visual basic for applications vba ki pa ne uporablja knjiznice ole automation katero pravilo uporablja vasa aplikacija kako torej vsa ta pravila in knjiznice vplivajo na microsoftove izdelke kako ugotoviti katero pravilo je v uporabi v danem primerku aplikacije v spodnji tabeli so zbrane interpretacije dvomestnih letnic za vsako od teh aplikacij izdelek pravilo komentar microsoft access razlicica microsoft visual basic razlicica vse dvomestne letnice se samodejno in nespremenljivo preslikajo v stoletje logika in pravila obdelovanja datumov so vdelana v izvedljive datoteke zasebnega jedra vsakega programa in dinamicnih povezovalnih knjiznic microsoft access razlicica uporablja knjiznico ole automation pravila so odvisna od razlicice knjiznice ki je namescena v racunalniku microsoft excel razlicica microsoft excel razlicica dvomestna letnica manjsa od se preslika v stoletje dvomestna letnica enaka ali vecja od se preslika v stoletje vrednost » « se npr shrani kot » « medtem ko se vrednost » « shrani kot » « microsoft excel razlicica dvomestna letnica manjsa od se preslika v stoletje dvomestna letnica enaka ali vecja od se preslika v stoletje vrednost » « se npr shrani kot » « medtem ko se vrednost » « shrani kot » « microsoft visual basic razlicica bitni vb uporablja bitno razlicico knjiznice ole automation ta razlicica ni bila nikoli posodobljena zato vdelana resitev drsecega intervala ni na voljo v aplikacijah vb privzame da vse dvomestne letnice spadajo v trenutno stoletje kot ga definira sistemska ura microsoft access razlicica microsoft visual basic razlicica bitna microsoft visual basic razlicica uporablja knjiznico ole automation pravilo je odvisno od razlicice knjiznice ki je namescena v racunalniku microsoft outlook pri obdelovanju datumov v opravilih dogodkih in srecanjih outlook uporablja interval definiran s tockama let pred trenutnim datumom in let po trenutnem datumu za rojstne dneve zapisane v outlookovih stikih se uporablja drugacno pravilo ker je v tem primeru preteklost pomembnejsa dvomestne letnice se preslikajo v interval med petindevetdesetimi leti pred trenutnim datumom in petimi leti po njem kot to definira sistemska ura datoteko outtlib dll morate posodobiti na razlicico sicer dogodki ki se raztezajo prek meje stoletja ne bodo pravilno zabelezeni microsoft word razlicica microsoft word razlicica dvomestna letnica » « se interpretira kot leto vse druge letnice pa se preslikajo v stoletje microsoft word uporablja to pravilo pri razvrscanju tabel in pri uporabi oblikovanja datumov menjava slik ali citiranih polj quote fields pri razvrscanju tabel lahko pride do tezav z datumi ki so jih vnesli uporabniki poleg tega so podatki uvozeni iz drugih programov predstavljeni kot besedilo zato jih je treba pregledati microsoft word razlicica dvomestne letnice od do se preslikajo v stoletje vse druge pa v stoletje za interpretacijo dvomestnih letnic pri uporabi oblikovanja datumov ali citiranih polj quote fields se uporablja datumski interval pri razvrscanju tabel lahko pride do tezav z datumi ki so jih vnesli uporabniki poleg tega so podatki uvozeni iz drugih programov predstavljeni kot besedilo zato jih je treba pregledati tabela pravila za dolocanje stoletja ce uporabljate izdelek za katerega v tabeli pise da uporablja knjiznico ole automation morate ugotoviti katera razlicica datoteke oleaut dll je v racunalniku ce zelite ugotoviti katero pravilo je v uporabi to lahko ugotovite rocno ali pa programsko z uporabo prilozene kode ce zelite rocno ugotoviti katera razlicica je v racunalniku zazenite raziskovalca in pojdite v imenik windows system poiscite datoteko oleaut dll in jo kliknite z desno miskino tipko v kontekstnem meniju izberite ukaz lastnosti ko se prikaze pogovorno okno lastnosti kliknite kartico razlicica nato pa se razlicica izdelka prikazala se bo stevilka razlicice datoteke ce je ta stevilka ali vecja je v uporabi algoritem drsecega intervala ce je razlicica starejsa se vse dvomestne letnice preslikajo v trenutno stoletje kot ga definira sistemska ura programsko ugotavljanje razlicice razlicico knjiznice ole automation lahko dolocite tudi programsko z uporabo programske kode vba spodnjo kodo postavite v nov modul in zazenite proceduro isolelibnewer tako se bo pokazalo ali je namescena novejsa razlicica datoteke oleaut dll »drseci interval« ' klici api za pridobivanje informacij o razlicici datoteke private type fileversion fileversion as string ' celotna razlicica datoteke kot niz fileversionmsl as integer ' razlicica datoteke msb low fileversionmsh as integer ' razlicica datoteke msb high fileversionlsl as integer ' razlicica datoteke lsb low fileversionlsh as integer ' razlicica datoteke lsb high productversion as string ' datotecna razlicica izdelka kot niz productversionmsl as integer ' razlicica izdelka msb low productversionmsh as integer ' razlicica izdelka msb high productversionlsl as integer ' razlicica izdelka lsb low productversionlsh as integer ' razlicica izdelka lsb high end type private type vs fixedfileinfo dwsignature as long dwstrucversionl as integer dwstrucversionh as integer dwfileversionmsl as integer dwfileversionmsh as integer dwfileversionlsl as integer dwfileversionlsh as integer dwproductversionmsl as integer dwproductversionmsh as integer dwproductversionlsl as integer dwproductversionlsh as integer dwfileflagsmask as long dwfileflags as long dwfileos as long dwfiletype as long dwfilesubtype as long dwfiledatems as long dwfiledatels as long end type private declare function getfileversioninfo lib version dll alias getfileversioninfoa byval lptstrfilename as string byval dwhandle as long byval dwlen as long lpdata as any as long private declare function getfileversioninfosize lib version dll alias getfileversioninfosizea byval lptstrfilename as string lpdwhandle as long as long private declare function verqueryvalue lib version dll alias verqueryvaluea pblock as any byval lpsubblock as string lplpbuffer as any pulen as long as long private declare sub movememory lib kernel alias rtlmovememory dest as any byval source as long byval length as long private sub getresourceversion strfilename as string recfilever as fileversion ' komentar vrne informacije o razlicici datoteke ' parametri strfilename ime datoteke ' recfilever fileversion type ' vrne nic ' dim lngrc as long dim lngdummy as long dim abytbuffer as byte dim lngbufferlen as long dim lngverpointer as long dim udtverbuffer as vs fixedfileinfo dim lngverbufferlen as long on error goto proc err ' branje velikosti lngbufferlen getfileversioninfosize strfilename lngdummy if lngbufferlen then exit sub end if ' nastavljanje matrike redim abytbuffer lngbufferlen ' pridobvanje informacij o razlicici datoteke lngrc getfileversioninfo strfilename lngbufferlen abytbuffer lngrc verqueryvalue abytbuffer lngverpointer lngverbufferlen ' manipuliranje z biti movememory udtverbuffer lngverpointer len udtverbuffer ' gradnja niza z razlicico datoteke recfilever fileversion format udtverbuffer dwfileversionmsh format udtverbuffer dwfileversionmsl format udtverbuffer dwfileversionlsh format udtverbuffer dwfileversionlsl recfilever fileversionlsh udtverbuffer dwfileversionlsh recfilever fileversionlsl udtverbuffer dwfileversionlsl recfilever fileversionmsh udtverbuffer dwfileversionmsh recfilever fileversionmsl udtverbuffer dwfileversionmsl ' gradnja niza z razlicico izdelka recfilever productversion format udtverbuffer dwproductversionmsh format udtverbuffer dwproductversionmsl format udtverbuffer dwproductversionlsh format udtverbuffer dwproductversionlsl recfilever productversionlsh udtverbuffer dwproductversionlsh recfilever productversionlsl udtverbuffer dwproductversionlsl recfilever productversionmsh udtverbuffer dwproductversionmsh recfilever productversionmsl udtverbuffer dwproductversionmsl proc exit exit sub proc err msgbox error err number err description getresourceversion resume proc exit end sub public function isolelibnewer as boolean ' komentar doloca ali ima namescena knjiznica ole automation ' oleaut dll algoritem drsecega okna ' na mestu ' parametri brez ' vrne true ce nova razlicica podpira ' algoritem drsecega okna false ce ne ali pa ' ce pride do notranje napake ' dim strfile as string dim recfile as fileversion on error goto proc err strfile oleaut dll getresourceversion strfile recfile select case recfile fileversionlsh case ' stara razlicica isolelibnewer false case ' star algoritem isolelibnewer false case is ' nov algoritem isolelibnewer true case else ' neznana razlicica predpostavi napako msgbox neznana razlicica oleaut dll isolelibnewer false end select proc exit exit function proc err msgbox error err number err description isolelibnewer resume proc exit end function izpis kode ugotavljanje katera knjiznica ole je namescena resitve »drsecega intervala« po meri ce vasa aplikacija temelji na bitnem programu kot je microsoft access razlicice ali microsoft visual basic razlicice ali pa ce uporablja eno starejsih razlicic knjiznice ole automation algoritem drsecega intervala ne obstaja v tem primeru boste morali ustvariti svoj algoritem ki bo temeljil na kodi ceprav uporabljate izdelek ki uporablja algoritem drsecega intervala se morate odlociti ali za vaso aplikacijo pride v postev obseg od do ce ni tako morate napisati svojo rutino tale koda je primer procedure za drseci interval ta razlicica vedno zavrze informacije o stoletju in doloci stoletje glede na postavljene omejitve function safecentury vardatein as variant intpivot as integer as variant ' komentar vrne podani datum s popravljenim stoletjem ' kot je to doloceno z izhodiscnim letom z uporabo ' tega pravila ' zadnji dve stevki leta ' predvideno stoletje ' ' intpivot st ' intpivot th ' ' vse informacije o stoletju podane v ' parametru vardatein so zavrzene to je nujno zato ker je ' v casu ko pride datum do te procedure bil najbrz ' ze spremenjen s strani accessovega pravila za predvidevanje ' in je torej sumljiv ' ' tale razlicica je namenjena bitnim gostiteljem ' kot sta access in visual basic ' ' parametri vardatein variant ki vsebuje datum lahko je ' niz ali datum vendar mora biti ena od teh ' oblik zapisa ' mm dd yy ' dd mm yy ' mm dd yyyy ' dd mm yyyy ' intpivot izhod leto prehoda v trenutno stoletje ' vrne variant tipa datum ki vsebuje preoblikovani ' datum ali null ce podane vrednosti ni mogoce ovrednotiti ' kot datuma ali ce pride do napake ' primer safecentury vrne ' safecentury vrne ' safecentury vrne ' safecentury vrne ' dim intyear as integer dim fisdate as integer dim fok as integer on error goto proc err ' privzamemo napako fok false ' dolocanje ali podana vrednost lahko select case vartype vardatein case v date ' to je datum obdelaj stoletje fok true case v string ' gre za niz torej uporabljamo isdate za dolocanje ali je vrednost ' veljavna kot datum isdate za preverjanje veljavnosti ' uporablja datumske nastavitve v nadzorni plosci ' dolocene oblike zapisa datumov npr »monday june rd « ' torej ne bodo upostevane kot veljavni datumi glejte ' komentarje procedure o oblikah zapisa datumov ki jih ' lahko uporabimo s to proceduro on error resume next fisdate isdate vardatein fok err on error goto proc err case v long ' preverjanje ali je v obsegu serijskega datuma fok vardatein and vardatein case else ' se ne da razbrati kaj je end select if fok then ' pridobi dve desni stevki v letnici uporabljena je funkcija ' format tako si zagotovimo da ima niz ki ga preiskujemo ' vedno stiri stevke intyear cint right format vardatein yyyy ' prelom stoletja tu uporabljamo eksplicitna vdelana ' stoletja morda je videti da to ni zdruzljivo z letnico ' ne vdeluj podatkov o stoletjih vendar doloca ' vse stiri stevke v letnici glede na to ' da se moramo zanesti na to proceduro ce zelimo ' sprejeti zeleno predpostavko so vdelane vrednosti pravilne if intyear intpivot then ' ce je podana dvomestna letnica vecja od ' izhodiscne stevilke je vrnjena vrednost v ' stoletju intyear intyear else ' ce je podana dvomestna letnica manjsa ali enaka ' izhodiscni stevilki je vrnjena vrednost v ' stoletju intyear intyear end if ' vrne variant tu ga eksplicitno uporabljamo kot datum ' ta koda eksplicitno ustvari datum v obliki zapisa mm dd yyyy ' ce je vasa oblika zapisa datuma drugacna spremenite zaporedje ' v datumskem nizu safecentury cvdate month vardatein day vardatein intyear else safecentury null end if proc exit exit function proc err safecentury null resume proc exit end function izpis kode procedura »drseci interval« za bitni basic access in vb public function safecenturyvba vardatein as variant intpivot as integer as variant ' komentar vrne podani datum s spremenjenim stoletjem ' kot to doloca izbrano izhodiscno leto ce sta ' zadnji dve stevki podanega datuma manjsi ' ali enaki vrednosti intpivot se uporabi ' stoletje sicer pa stoletje ' vse informacije o stoletju v parametru ' vardatein so zavrzene to je zato ker je ' v casu ko pride datum v to proceduro vb najverjetneje ' ze dolocil stoletje torej je datum ' sumljiv ' parameteri vardatein variant ki vsebuje datum gre lahko za ' niz ali datum vendar mora biti v eni od teh ' oblik zapisa ' mm dd yy ' dd mm yy ' mm dd yyyy ' dd mm yyyy ' intpivot izhod leto prehoda v trenutno stoletje ' vrne variant tipa datum ki vsebuje preoblikovani ' datum ali »null« ce podane vrednosti ni mogoce ' ovrednotiti kot datum ali pa ce pride do napake ' dim intyear as integer dim fisdate as boolean dim fok as boolean on error goto proc err ' privzemi napako fok false ' doloci ali je podana vrednost mogoce select case vartype vardatein case vbdate ' gre za datum obdelaj stoletje fok true case vbstring ' gre za niz torej za ugotavljanje veljavnosti datuma ' uporabljamo isdate isdate uporablja datumske nastavitve v ' nadzorni plosci za dolocanje veljavnosti ' dolocenih datumskih oblik zapisa npr »monday june rd « ' ta procedura ne bo upostevala kot veljavnih glejte ' komentarje procedur za veljavne oblike datumov ki jih lahko ' uporabite v tej proceduri on error resume next fisdate isdate vardatein fok err on error goto proc err case vblong ' preverite ali je v obsegu serijskega datuma fok vardatein and vardatein case else ' ni mogoce ugotoviti za kaj gre end select if fok then ' pridobivanje dveh desnih stevk letnice uporabljena je funkcija ' format tako si zagotovimo da ima niz ki ga preiskujemo ' vedno stiri stevke intyear cint right format vardatein yyyy ' prelom stoletja tu uporabljamo eksplicitna vdelana ' stoletja morda je videti da to ni zdruzljivo z letnico ' ne vdeluj podatkov o stoletjih vendar doloca ' vse stiri stevke v letnici glede na to ' da se moramo zanesti na to proceduro ce zelimo ' sprejeti zeleno predpostavko so vdelane vrednosti pravilne if intyear intpivot then ' ce je podana dvomestna letnica vecja od ' izhodiscne stevilke je vrnjena vrednost v ' stoletju intyear intyear else ' ce je podana dvomestna letnica manjsa ali enaka ' izhodiscni stevilki je vrnjena vrednost v ' stoletju intyear intyear end if ' vrne variant tu ga eksplicitno uporabljamo kot datum safecenturyvba cvdate month vardatein day vardatein intyear else safecenturyvba null end if proc exit exit function proc err msgbox error err number err description safecenturyvba safecenturyvba null resume proc exit end function izpis kode procedura »drseci interval« za vba stran z vsebino nazaj na stran z vsebino prenesi ta clanek prenesi ta clanek cetrtek marca © microsoft corporation vse pravice pridrzane pogoji za uporabo to spletno mesto predstavlja izjavo o pripravljenosti na letnico in tu vsebovane informacije so v skladu s pogoji tega dokumenta in z zakonskim aktom o pripravljenosti in informacijami v zvezi z letnico