Kuopion yliopisto
15. Tulostaminen FixIT-sovelluksissa
14. FixIT Server - virhetilanteista
13. FileMan 22 - uudet piirteet
12. FileMan-Kernel- sovelluksen rakentaminen
11. Musti-päivät 1999
10. MailManin uudet piirteet
9. Toiminnon käynnistys viestin avulla
8. Apurutiineja
7. Merkkijonofunktioita
6. Uutta, MailMan 7.1
5. Uutta, Kernel 8
4. Uutta, FileMan 21
3. Tausta-ajon asetus
2. Kernelin käynnistys
1. Päivämäärät
Kuopion yliopisto
Atk-keskus
10.2.1999
Hellevi.Ruonamaa@uku.fi

Päivämäärien käsittely

Fim 21, Kernel 8

Päivämäärä/aika talletetaan FileManissa joko FileMan-muotoisena tai $HOROLOG-muotoisena. FileManin sisäinen päivämäärämuoto on vvvkkpp.ttmmss, missä vvv = vuosien lukumäärä vuoden 1700 jälkeen, kk = kuukausi, pp = päivä, tt  = tunti, mm = minuutit, ss = sekunnit.
$HOROLOG -muotoinen päivämäärä on päivät,sekunnit, missä päivät on päivien lukumäärä 31.12.1840 jälkeen ja sekunnit on sekuntien lukumäärä keskiyön jälkeen.

Päivämääriä voidaan käsitellä %DT-, %DTC- ja XLFDT-rutiineilla,  ^DD("DD")-globaalisolmulla sekä FileManin FUNKTIO-tiedostossa olevilla päivämääräfunktioilla (MONTH, YEAR, DATE, NOW, TIME, TODAY, MAX, MIN, DAYOFWEEK, MINUTES, MONTHNAME, NUMDATE, NUMDAY, NUMMONTH, NUMYEAR RANGEDATE).

FileMan-muotoa sanotaan päivämäärän sisäiseksi muodoksi ja tulostettavaa muotoa ulkoiseksi muodoksi.

Päivämääriä käsitellään seuraavissa dokumenteissa:
    FileMan 21 Programmer Manual s. 141 alkaen.
    Kernel 8 Systems Manual s. 507 alkaen.
    Funktioita käsitellään suomenkielisessä FileManager käyttäjän oppaassa
    sivulta 105 alkaen.

Päivämäärän muutos tulostettavasta muodosta FileMan-muotoon
Päivämäärän muutos FileMan-muodosta tulostettavaan muotoon.
Päivämäärän muutos FileMan-muodosta $HOROLOG-muotoon.
Päivämäärän muutos $HOROLOG-muodosta FileMan-muotoon.
Päivämäärän muutos $HOROLOG-muodosta tulostettavaan muotoon.
Nyt: tämä päivä, tämä hetki
Päivämäärien väliset aikaerot
Muut käsittelytavat

Tulostettavasta muodosta FileMan-muotoon

%DT

%DT tarkistaa onko annettu päivämäärä oikean muotoinen ja muuttaa sen FileMan-muotoon.

Syöttömuuttujat:
%DT         Kirjaimia sisältävä merkkijono, jolla ohjataan rutiinin toimintaa.
                 Merkkijono voi sisältää yhden tai useampia seuraavista kirjaimista:
                 AEFNPRSTX. Seuraavassa kuvataan kunkin kirjaimen merkitystä
                 rutiinin toiminnalle:
                 A    Päivämäärä kysytään käyttäjältä.
                 E    Vastaus tulostetaan näytölle.
                 F    Päivämäärän oletetaan olevan tulevaisuudessa.
                 N   Päivämäärää EI voi antaa pelkillä numeroilla (esim. ei 181298
                       vaan 18.12.98)
                 P    Päivämäärän oletetaan olevan menneisyydessä.
                 R    Myös aika pitää antaa päivämäärän lisäksi.
                 S    Sekunnit palautetaan.
                 T    Aika voidaan antaa päivämäärän lisäksi mutta se ei ole
                       pakollinen.
                 X   Päivä ja kuukausi pitää antaa täsmällisesti
                       (esim. ei 12.98, joka tarkoittaa vuoden 1998 joulukuuta)

%DT("A") Sisältää kehotteen, jota käytetään "PVM:"-n sijaan.
%DT("B")  Oletuspäivä/aika.
%DT(0)     Estää hyväksymästä päivämäärää, joka on ennen tai jälkeen 
                  halutun päivän.
DTIME      Aika, jonka rutiini odottaa vastausta.
X               Sisältää päivämäärän, jos %DT ei sisällä A:ta (Jos päivämäärää ei 
                  kysytä käyttäjältä, X on pakollinen)
 

Paluumuuttujat:
Y              -1, jos tarjottua päivämäärää ei ole hyväksytty.
                 Päivämäärä FileMan-muodossa esim. 2981218.153455
X              Rutiinin käsittelemä päivämäärä (joko syöttömuuttujasta X tai
                 kehotteessa annettu).
DTOUT    1, jos DTIME-syöttömuuttuja on annettu, eikä kehotteeseen ole
                 vastattu sen kuluessa.
 

80-20-sääntö

Vuosituhannen vaihteen vuoksi %DT-rutiinissa on otettu käyttöön 80-20 sääntö, joka määrittelee sen, miten vuosi ymmärretään siinä tapauksessa, että se annetaan kahdella numerolla.

Kun FileManissa aikaisemmin on vuosi annettu kahdella numerolla, se on tarkoittanut kuluvaa vuosisataa. Nyt jos vuosi annetaan kahdella numerolla ja se olisi kauempana kuin 80 vuoden päässä menneisyydessä, FileMan olettaa, että kyseessä on 2000-luku. Jos se olisi kauempana kuin 20 vuoden päässä tulevaisuudessa, FileMan olettaa, että kyseessä on 1900-luku.

Jos vuonna 1998 vastataan rutiinille 1.1.18, FileMan ymmärtää sen tarkoittavan 1.1.1918 mutta jos sille vastataan 1.1.17, FileMan ymmärtää sen tarkoittavan 1.1.2017

Jos vuonna 2000 vastataan rutiinille 1.1.21, FileMan ymmärtää sen tarkoittavan 1.1.1921 mutta jos sille vastataan 1.1.20, FileMan ymmärtää sen tarkoittavan 1.1.2020.

Tämä muutos rutiinin toimintaan on tehty sen vuoksi, että käyttäjien ei tarvitse edelleenkään tallettaa vuotta neljällä numerolla eikä käyttöliittymien rakentajien tarvitse muuttaa lomakkeiden päivämääräkenttiä.
 
 
 

FileMan-muodosta tulostettavaan muotoon

DD^%DT

DD^%DT palauttaa päivämäärän tulostettavassa muodossa.

Syöttömuuttujat:
Y             Päivämäärä FileMan-muodossa
%DT        S, jos halutaan että myös sekunnit ilmoitetaan.

Paluumuuttuja:
Y             Päivämäärä ulkoisessa muodossa.

Esimerkki:
                S Y=2981202.2333 D DD^%DT
                Palauttaa Y= 2.12.1998@23:33
 
 
 

^DD("DD")

^DD("DD")-globaalisolmun suoritus palauttaa päivämäärän ulkoisessa muodossa.

Syöttömuuttuja:
Y            Päivämäärä FileMan-muodossa
Paluumuuttuja:
Y            Päivämäärä ulkoisessa muodossa.

Esimerkki:
                S Y=2981202.2333  X  ^DD("DD")
                Palauttaa  Y= 2.12.1998@23:33
 
 

$$FMTE^XLFDT(x[,y])

$$FMTE^XLFDT(x[,y]) palauttaa FileMan-päivämäärän tulostettavassa muodossa.

x              Päivämäärä/aika FileMan-muodossa.
y              Vaikuttaa tulostusmuotoon seuraavasti.
                Jos +y=1, palauttaa päivämäärän/ajan siten, että kuukauden nimi on kirjoitettu.(=oletus)
                Jos +y=2, palauttaa pv/kk/vv@hh:mm:ss-muodossa.
                Jos +y=3, palauttaa pv/kk/vv@hh:mm:ss-muodossa.
                Jos +y=4, palauttaa vv/kk/pv@hh:mm:ss-muodossa.
                Jos +y=5, palauttaa pv/kk/vvvv@hh:mm:ss-muodossa.
                Jos +y=6, palauttaa pv/kk/vvvv@hh:mm:ss-muodossa.
                Jos +y=7, palauttaa vvvv/kk/pp@hh:mm:ss-muodossa.
                Jos y sisältää "D", tulostetaan vain päivä.
                Jos y sisältää "F", tulostetaan yksinumeroisten kuukaisien ja päivien eteen blankot.
                Jos y sisältää "P", tulostetaan aika am/pm-muodossa.
                Jos y sisältää "M", ei tulosteta sekunteja.
                Jos y sisältää "S", tulostetaan sekunnin tarkkuudella.
                Jos y sisältää "Z", tulostetaan yksinumeroisten kuukausien ja päivien eteen nollat.
 

Esimerkkejä:

        W $$FMTE^XLFDT(2980103.23435,1)
                palauttaa                                      03. tammikuuta 1998@23:43:50
        W $$FMTE^XLFDT(2980103.23435,3)
                 palauttaa                                               3.1.98@23:43:50
        W $$FMTE^XLFDT(2980103.23435,5)
                 palauttaa                                               3.1.1998@23:43:50
        W $$FMTE^XLFDT(2980103.23435,"3D")
                 palauttaa                                               3.1.98
        W $$FMTE^XLFDT(2980103.23435,"3F")
                 palauttaa                                                 3.  1.98@23:43:50
        W $$FMTE^XLFDT(2981113.23435,"3F")
                 palauttaa                                               13.11.98@23:43:50
        W $$FMTE^XLFDT(2980103.23435,"3P")
                 palauttaa                                                3.1.98 11:43:50 pm
        W $$FMTE^XLFDT(2980103.23435,"3M")
                 palauttaa                                                3.1.98@23:43
        W $$FMTE^XLFDT(2980103.23435,"3S")
                palauttaa                                                 3.1.98@23:43:50
        W $$FMTE^XLFDT(2980103.23435,"3Z")
                palauttaa                                                03.01.98@23:43:50
 
 
 

FileMan-muodosta $HOROLOG-muotoon.

H^%DTC

H^%DTC muuttaa FileMan-päivämäärän/ajan $HOROLOG-muotoon.

Syöttömuuttuja:
X             Päivämäärä/aika FileMan-muodossa.

Paluumuuttujat:
%H           Sama päivämäärä $HOROLOG-muodossa.
%T           Aika  $HOROLOG-muodossa
%Y           Viikonpäivän numero 0-6, missä 0 on sunnuntai

Esimerkki:
                S X=2980103 D H^%DTC
                Palauttaa:
                    %H       57346
                    %T       0
                    %Y       6
                    X          2980103
 
 
 

DW^%DTC

DW^%DTC Kuten H^%DTC muuttaa FileMan-päivämäärän/ajan $HOROLOG-muotoon, mutta muutta myös X:n arvoksi viikonpäivän nimen.

Syöttömuuttuja:
X              Päivämäärä/aika FileMan-muodossa.

Paluumuuttujat:
%H           Sama päivämäärä $HOROLOG-muodossa.
%T           Aika  $HOROLOG-muodossa
%Y           Viikonpäivän numero 0-6, missä 0 on sunnuntai
X              Viikonpäivän nimi

Esimerkki:
                S X=2980103 D DW^%DTC
                Palauttaa:
                    %H            57346
                    %T            0
                    %Y            6
                    X               lauantai
 
 
 

$$FMTH^XLFDT(x[,y])

$$FMTH^XLFDT(x[,y]) palauttaa FileMan-päivämäärän $HOROLOG-muodossa.

x                Päivämäärä FileMan-muodossa.
y                Jos 1, palauttaa ainoastaan päivän, ei aikaa.
 
 
 

$HOROLOG-muodosta FileMan-muotoon.

YMD^%DTC

YMD^%DTC muuttaa $HOROLOG-muotoisen päivämäärän/ajan FilaMan-muotoon.

Syöttömuuttuja:
%H             päivämäärä/aika $HOROLOG-muodossa.

Paluumuuttujat:
%               Aika FileMan-muodossa
X                Päivämäärä FileMan-muodossa.
 
 
 

$$HTFM^XLFDT(x[,y])

$$HTFM^XLFDT(x[,y]) palauttaa $HOROLOG-muotoisen päivämäärän/ajan FileMan-muodossa.

x                Päivämäärä/aika $HOROLOG-muodossa.
y                Jos 1, palauttaa ainoastaan päivän.
 
 
 

$HOROLOG-muodosta tulostettavaan muotoon.

YX^%DTC

YX^%DTC palauttaa $HOROLOG-päivämäärän tulostettavassa muodossa sekä FileMan-muodossa.

Syöttömuuttuja:
%H            päivämäärä $HOROLOG-muodossa

Paluumuuttujat:
Y                Päivämäärä tulostettavassa muodossa.
X                Päivämäärä FileMan-muodossa.
%               Aika FileMan-muodossa.
 
 
 

$$HTE^XLFDT(x[,y])

$$HTE^XLFDT(x[,y]) palauttaa $HOROLOG-muotoisen päivämäärän/ajan tulostettavassa muodossa.

x                Päivämäärä/aika $HOROLOG-muodossa.
y                Jos 1, palauttaa kuukauden nimellä (=oletus)
                  Jos 2, palauttaa kuukauden numerona.
 
 
 

Nyt: tämä päivä, tämä hetki

NOW^%DTC

NOW^%DTC palauttaa kysymishetken FileMan- ja $HOROLOG-muodoissa.

Paluumuuttujat:
%                Kysymishetken FileMan päivä/aika
%H             Sama aika $HOROLOG-muodossa
%I(1)          Kuukausi
%I(2)          Päivä
%I(3)          Vuosi-1700
X                Päivämäärä FileMan-muodossa

Esimerkki:
                  D NOW^%DTC
                  Palauttaa:
                    %                   2981221.121523
                    %H                57698,44123
                    %I(1)             12
                    %I(2)             21
                    %I(3)            298
                    X                   2981221
 
 
 

$$DT^XLFDT

$$DT^XLFDT palauttaa kysymispäivän FileMan-muodossa.
 
 

$$NOW^XLFDT

$$NOW^XLFDT palauttaa kysymispäivän/ajan FileMan-muodossa.
 
 
 

Päivämäärien väliset aikaerot

%DTC

%DTC palauttaa kahden päivämäärän välillä olevien päivien lukumäärän.

Syöttömuuttujat:
X1              Päivämäärä FileMan-muodossa.
X2              Toinen päivämäärä FileMan-muodossa.

Paluumuuttujat:
X               Kahden päivämäärän välisten päivien lukumäärä. X2 vähennetään X1:stä.
%Y           1, jos päivämäärissä on sekä kuukausi että päivä.
                 0, jos päivämäärät olivat siinä muodossa että erotusta ei voitu laskea.
 
 
 

C^%DTC

C^%DTC Lisää tai poistaa päivämäärästä halutun määrän päiviä (ja ajan) ja palauttaa sekä FileMan- että $HOROLOG-päivän (ja ajan)

Syöttömuuttujat:
X1              Päivämäärä FileMan-muodossa.
X2              Lisättävien (positiivinen luku) tai vähennettävien (negatiivinen luku) päivien lukumäärä.

Paluumuuttujat:
X                Lisäyksessä tai vähennyksessä saatu uusi päivämäärä FileMan-muodossa.
%H            Sama päivämäärä $HOROLOG-muodossa
 
 
 

$$FMADD^XLFDT(x,d,h,m,s)

$$FMADD^XLFDT(x,d,h,m,s) palauttaa FileMan-muodossa päivämäärän/ajan, mikä saadaan kun FileMan-muodossa olevaan päivämäärään/aikaan lisätään päiviä. tunteja, minuutteja ja sekunteja.

x                Päivämäärä FileMan-muodossa
d                Lisättävät päivät.
h                Lisättävät tunnit.
m               Lisättävät minuutit.
s                Lisättävät sekunnit.
 
 

$$FMDIFF^XLFDT(x1,x2[,x3])

$$FMDIFF^XLFDT(x1,x2[,x3]) palauttaa kahden FileMan-muodossa olevan päivämäärän erotuksen

x1                Päivämäärä FileMan-muodossa.
x2                x1:stä  vähennettävä päivämäärä.
x3                Jos 1, palauttaa erotuksen päivissä (oletus)
                    Jos 2, palauttaa erotuksen sekunneissa.
                    Jos 3, palauttaa erotuksen PV tunti:minuutti:sekunti-muodossa.
 
 

$$HADD^XLFDT(x,d,h,m,s)

$$HADD^XLFDT(x,d,h,m,s) palauttaa $HOROLOG-päivämäärän/ajan, mikä saadaan kun $HOROLOG-muotoiseen päivämäärään/aikaan lisätään päiviä. tunteja, minuutteja ja sekunteja.

x                Päivämäärä $HOROLOG-muodossa
d                Lisättävät päivät.
h                Lisättävät tunnit.
m               Lisättävät minuutit.
s                Lisättävät sekunnit.
 
 

$$HDIFF^XLFDT(x1,x2,x3)

$$HDIFF^XLFDT(x1,x2,x3) palauttaa kahden $HOROLOG-muotoisen päivämäärän/ajan erotuksen.

x1            $HOROLOG-muotoinen päivämäärä/aika.
x2            x1:stä vähennettävä $HOROLOG-muotoinen päivämäärä/aika.
x3            Jos 1, palauttaa vain kokonaiset päivät.
                Jos 2, palauttaa erotuksen sekunteina.
                Jos 3, palauttaa muodossa pv  hh:mm:ss
 
 
 

Muut käsittelytavat

S^%DTC

S^%DTC muuttaa sekunnit tunneiksi, minuuteiksi ja sekunneiksi.

Syöttömuuttuja:
%            luku, joka ilmaisee sekuntien lukumäärän keskiyön jälkeen, esim. $P($H,",",2).

Paluumuuttuja:
%            aika FileMan-muodossa.
 
 
 

HELP^%DTC

HELP^%DTC näyttää päivämääriin liittyvän opasteen.

Syöttömuuttujat:
%DT      Kuten  %DT-rutiinissa.
%DT(0) Sallitun päivämäärän ylä- tai alarajan.
 
 
 

COMMA^%DTC

COMMA^%DTC asettaa pilkun erottamaan luvun tuhansia, miljoonia ja miljardeja.

Syöttömuuttujat:
X            Muotoiltava luku.
X2          Tulostettavien desimaalien lukumäärä.
X3          Tulostuksen pituus.

Paluumuuttuja:
X             Luku muotoiltuna pilkuilla, pyöristettynä X2:ssa olevan desimaalin tarkkuuteen.

Esimerkki:
                S X=12345678.3456,X2=3,X3=17 D COMMA^%DTC W "FIM"_X
                FIM  12,345,678.346
 
 
 

$$DOW^XLFDT(x[,y])

$$DOW^XLFDT(x[,y]) palauttaa viikonpäivän.

x                FileMan-päivämäärä.
1                1, jos halutaan palautettavaksi viikonpäivän numero (0=sunnuntai)
 
 
 

$$SCH^XLFDT(schedule_code,base_date[,force_future])

$$SCH^XLFDT(schedule_code,base_date[,force_future]) palauttaa FileMan-muotoisen päivämäärän/ajan, joka saadaan kun base_date-päivämäärään lisätään aikaa schedule_coden mukaan.

Kts. Kernel V 8.0 systems Manual sivu 511.


|sivun alkuun|