|
|
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.
|