Cikk azonosítója: 210604 - Utolsó ellenőrzés: 2007. március 12. - Verziószám: 5.1

A dátum- és időértékek kiszámítására és megjelenítésére szolgáló függvények az Access programban

RendszertippA jelen cikk az Ön által használttól eltérő operációs rendszerre vonatkozik. A cikk azon tartalmait, amelyek nem relevánsak Önnek, letiltjuk.
Figyelem! A cikkben ismertetettek alkalmazásához a makrókkal, a programkódkészítéssel és az együttműködési mechanizmusokkal kapcsolatos alapismeretek szükségesek.

A lap tartalma

Az összes kibontása | Az összes összecsukása

Összefoglaló

Mivel a rendszer a dátum- és időértéket dupla pontosságú számként tárolja, előfordulhat, hogy amikor a dátum és idő értékét kifejezésben próbálja meg módosítani, a formázási eredmény helytelen lesz. A cikk bemutatja, hogy meghatározott dátumok megjelenítéséhez és időtartamok kiszámításához hogyan hozhat létre kifejezéseket és egyéni függvényeket.

A Microsoft csak szemléltetési célból ad közre programozási példákat, és azokra – beleértve a forgalomba hozhatóságot és az adott célra való megfelelőséget is – sem törvényi, sem másféle garanciát nem vállal. A cikkben ismertetettek alkalmazásához a szemléltetésre szolgáló programozási nyelvben, valamint az eljárások létrehozására és a velük kapcsolatos hibakeresésre szolgáló eszközök használatában való jártasság szükséges. A Microsoft támogatási szakemberei segítséget nyújthatnak egy-egy adott eljárás funkciójának megértésében, de funkcióbővítési célból nem módosítják a példákat, és nem készítenek az egyéni igényeknek megfelelő eljárásokat.

További információ

Meghatározott dátumok megjelenítése

Meghatározott dátumok megjelenítéséhez a DateSerial() függvény segítségével módosíthatja a dátumban szereplő napot, hónapot és évet. Az alábbi kifejezések használatával meghatározott dátumot jeleníthet meg például egy szövegmező Mező vagy kifejezés tulajdonságában vagy a parancsértelmező ablakban:
  • Az aktuális hónap:
    DateSerial(Year(Date()), Month(Date()), 1)
  • A következő hónap:
    DateSerial(Year(Date()), Month(Date()) + 1, 1)
  • Az aktuális hónap utolsó napja:
    DateSerial(Year(Date()), Month(Date()) + 1, 0)
  • A következő hónap utolsó napja:
    DateSerial(Year(Date()), Month(Date()) + 2, 0)
  • Az előző hónap első napja:
    DateSerial(Year(Date()), Month(Date())-1,1)
  • Az előző hónap utolsó napja:
    DateSerial(Year(Date()), Month(Date()),0)
  • Az aktuális negyedév első napja:
    DateSerial(Year(Date()), Int((Month(Date()) - 1) / 3) * 3 + 1, 1)
  • Az aktuális negyedév utolsó napja:
    DateSerial(Year(Date()), Int((Month(Date()) - 1) / 3) * 3 + 4, 0)
  • Az aktuális hét első napja (feltételezve, hogy a hét első napja vasárnap):
    Date() - WeekDay(Date()) + 1
  • Az aktuális hét utolsó napja:
    Date() - WeekDay(Date()) + 7
  • Az aktuális hét első napja (a Beállítások párbeszédpanel beállításainak használatával):
    Date() - WeekDay(Date(), 0) + 1
  • Az aktuális hét utolsó napja:
    Date() - WeekDay(Date(), 0) + 7
A pénzügyi év és hónap kiszámításáról a Microsoft Tudásbázis alábbi cikkében tájékozódhat:
210249  (http://support.microsoft.com/kb/210249/ ) Adott dátumhoz tartozó pénzügyi év vagy hónap meghatározása az Access 2000 programban (Előfordulhat, hogy a hivatkozás részben vagy teljes egészében angol nyelvű tartalomra mutat.)
FIGYELMEZTETÉS: Ha végrehajtja a példában szereplő lépéseket, azzal módosítja a Northwind.mdb mintaadatbázist. Ha kívánja, a Northwind.mdb fájlról készítsen biztonsági másolatot, és a lépéseket a másolaton hajtsa végre.

Időtartamok kiszámítása

Mivel az időértékeket a rendszer a 24 órás nap törtrészeként tárolja, a 24 óránál nagyobb időadatok összeadásakor, kivonásakor, szorzásakor és osztásakor előfordulhat, hogy a formázási eredmény helytelen.

Ha a Visual Basic programban például két dátum között eltelt óraszámot az értékek kivonásával szeretne kiszámítani, előfordulhat, hogy az eredmény helytelen lesz. Ennek szemléltetéséhez írja be az alábbi kódot a parancsértelmező ablakba, és figyelje meg, hogy 0:00 óra jelenik meg a helyes 53:00 óra helyett:
   KezdőDátum=#1993/06/01 8:00#
   ZáróDátum=#1993/06/03 13:00#
   ?Format(ZáróDátum-KezdőDátum,"hh:mm")

A 24 óránál nagyobb időértékek formázási problémáinak megoldásához használja a Visual Basic Int() vagy CSng() függvényét, amelyek segítségével a kiszámított időértéket különálló, a napot, az órát, a percet és a másodpercet tartalmazó változókra oszthatja fel. A különálló időváltozókat például az alábbi kódrészlettel hozhatja létre az egyéni függvényben:
 '-------------------------------------------------------------------
 ' Ez a mintakód az időtartamot hét különálló változóra osztja
 ' a következők szerint: nap, óra, perc, másodperc, összes idő
 ' (óra), összes idő (perc), összes idő (másodperc).
 '
 ' Az időtartam argumentum rugalmas, lehet egyetlen érték,
 ' egy kifejezés vagy egy mezőhivatkozás.
 '-------------------------------------------------------------------

 Dim összesóra As Long, összesperc As Long, összesmásodperc As Long
 Dim napok As Long, órák As Long, percek As Long, másodpercek As Long
 Dim időtartam As Variant

 napok = Int(CSng(időtartam))
 összesóra = Int(CSng(időtartam * 24))
 összesperc = Int(CSng(időtartam * 1440))
 összesmásodperc = Int(CSng(időtartam * 86400))
 órák = összesóra Mod 24
 percek = összesperc Mod 60
 másodpercek = összesmásodperc Mod 60

Az összesóra, az összesperc és az összesmásodperc változók segítségével az időértéket egyetlen számként jelenítheti meg. A napok, az órák, a percek és a másodpercek változók az időérték egyes részeinek megjelenítésére használhatók. Ha az időértékeket más formátumban szeretné megjeleníteni, a változókat az alábbi mintafüggvényekben látható módon összefűzheti:
  • Az ElteltNapok() függvénnyel két dátum vagy időpont között eltelt időtartam számítható ki, ahol az eredmény napban jelenik meg.
  • Az ElteltIdő() függvénnyel két dátum vagy időpont között eltelt időtartam számítható ki, ahol az eredmény napban, órában, percben és másodpercben jelenik meg.
  • Az Összidő() függvénnyel az időértékeket tartalmazó mezők egy táblában összesíthetők, ahol az összidő órában és percben jelenik meg.

Az ElteltNapok() mintafüggvény

Az ElteltNapok() függvény létrehozásához hajtsa végre az alábbi lépéseket:
  1. Nyissa meg a Northwind.mdb mintaadatbázist.
  2. Hozzon létre egy modult, és a deklarációs részbe írja be az alábbi sort, ha az még nem szerepel benne:
     Option Explicit
  3. Írja be az alábbi függvényt:
     Function ElteltNapok (időtartam)
        Dim napok As Long
    
        napok = Int(CSng(időtartam))
        ElteltNapok = napok & " nap "
     End Function
  4. A függvény teszteléséhez hozzon létre egy új lekérdezést a Rendelések tábla alapján.
  5. A QBE adatrácsban adja hozzá az alábbi mezőket.
        Mező: Szállítási dátum
        Megjelenítés: Bejelölve
    
        Mező: Rendelve
        Megjelenítés: Bejelölve
    
        Mező: Eltelt idő: ElteltNapok([Szállítási dátum]-[Rendelve])
        Megjelenítés: Bejelölve
  6. Futtassa a lekérdezést. Az Eltelt idő oszlopban a Rendelések tábla minden rekordjára vonatkozóan a Szállítási dátum és a Rendelve mező dátumai között eltelt napok száma látható.

Az ElteltIdő() mintafüggvény

Az ElteltIdő() függvény létrehozásához hajtsa végre az alábbi lépéseket:
  1. Hozzon létre egy új táblát az alábbi struktúrával, és mentse Időnapló néven.
        Tábla: Időnapló
        -----------------------
        Mezőnév: Kezdő időpont
        Adattípus: Dátum/Idő
        Formátum: Általános dátum
    
        Mezőnév: Záró időpont
        Adattípus: Dátum/Idő
        Formátum: Általános dátum
  2. Tekintse meg az Időnapló táblát Adatlap nézetben, írja be az alábbi három rekordot, majd zárja be a táblát:
        Kezdő időpont              Záró időpont
        -----------------------------------------------
        1995.05.10. 16:57:00       1995.05.15.  2:38:00
        1995.5.11.  10:17:31       1995.05.24. 18:05:00
        1995.05.18.  9:16:43       1995.05.19. 17:03:00
  3. Hozzon létre egy modult, és írja be az alábbi sort a deklarációs szakaszba:
     Option Explicit
  4. Írja be az alábbi függvényt:
     Function ElteltIdő(időtartam)
    
     Dim összesóra As Long, összesperc As Long, összesmásodperc As _
         Long
     Dim napok As Long, órák As Long, percek As Long, másodpercek As Long
    
     napok = Int(CSng(időtartam))
     összesóra = Int(CSng(időtartam * 24))
     összesperc = Int(CSng(időtartam * 1440))
     összesmásodperc = Int(CSng(időtartam * 86400))
     órák = összesóra Mod 24
     percek = összesperc Mod 60
     másodpercek = összesmásodperc Mod 60
    
     ElteltIdő = napok & " nap " & órák & " óra " & percek & _
     " perc " & másodpercek & " másodperc "
    
     End Function

    Megjegyzés: Az ElteltIdő függvény számára dátumot és időpontot kell megadni.
  5. A függvény teszteléséhez hozzon létre egy új, az Időnapló táblán alapuló kimutatást a Jelentés varázsló segítségével.
  6. Tekintse meg a kimutatást Tervező nézetben.
  7. Az Időnapló tábla adatokat tartalmazó szakaszában adjon hozzá egy kötetlen szövegmezőt, és a tulajdonságait állítsa be az alábbiak szerint:
        Beviteli mező
        ---------------
        Név: Eltelt idő
        Mező vagy kifejezés: =ElteltIdő([Záró időpont]-[Kezdő időpont])
        Szélesség: 7,6 cm
  8. Tekintse meg a kimutatás előnézetét. A rekordokban a teljes eltelt idő napban, órában, percben és másodpercben jelenik meg.

Az Összidő() mintafüggvény

Az Összidő() függvény létrehozásához hajtsa végre az alábbi lépéseket:

Megjegyzés: A cikkben szereplő mintakód a Microsoft Data Access Objects alkalmazást használja. A kód megfelelő futtatásához hivatkoznia kell a Microsoft DAO 3.6 objektumtárára. Ehhez a Visual Basic Editor programban kattintson a Tools (Eszközök) menü References (Hivatkozások) parancsára, és győződjön meg arról, hogy a Microsoft DAO 3.6 Object Library (Microsoft DAO 3.6 objektumtára) jelölőnégyzet be van jelölve.

  1. Hozzon létre egy új táblát az alábbi struktúrával, és mentse Időkimutatás néven.
        Tábla: Időkimutatás
        -----------------------
        Mezőnév: Napi óraszám
        Adattípus: Dátum/Idő
        Formátum: Rövid idő
  2. Tekintse meg az Időkimutatás táblát Adatlap nézetben, írja be az alábbi négy rekordot, majd zárja be a táblát:
        8:15
        7:37
        8:12
        8:03
  3. Hozzon létre egy modult, és a deklarációs részbe írja be az alábbi sort, ha az még nem szerepel benne:
     Option Explicit
  4. Írja be az alábbi függvényt:
     Function Összidő ()
    
     Dim db As DAO.Database, rs As DAO.Recordset
     Dim összesóra As Long, összesperc As Long
     Dim napok As Long, órák As Long, percek As Long
     Dim időtartam As Variant, j As Integer
    
     Set db = dbengine.workspaces(0).databases(0)
     Set rs = db.OpenRecordset("időkimutatás")
     időtartam = #12:00:00#
        While Not rs.EOF
           időtartam = időtartam + rs![Napi óraszám]
           rs.MoveNext
        Wend
     összesóra = Int(CSng(időtartam * 24))
     összesperc = Int(CSng(időtartam * 1440))
     órák = összesóra Mod 24
     percek = összesperc Mod 60
    
     Összidő = összesóra & " óra és " & percek & " perc"
    
     End Function
  5. A függvény teszteléséhez írja be az alábbi sort a parancsértelmező ablakba, majd nyomja le az ENTER billentyűt:
     ?GetTimeCardTotal()

    A parancsértelmező ablakban 32 óra és 7 perc jelenik meg.

Hivatkozások

A dátum- és időértékek kiszámításáról a Microsoft Tudásbázis alábbi cikkében tájékozódhat:
210276  (http://support.microsoft.com/kb/210276/ ) Dátum- és időadatok tárolása, kiszámítása és összehasonlítása a Microsoft Access programban

A cikkben található információ a következő(k)re vonatkozik:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
Kulcsszavak: 
kbhowto kbprogramming KB210604
A Microsoft tudásbázisban szolgáltatott információkat "az adott állapotban", bárminemű szavatosság vagy garancia nélkül biztosítjuk. A Microsoft kizár mindennemű, akár kifejezett, akár vélelmezett szavatosságot vagy garanciát, ideértve a forgalomképességre és az adott célra való alkalmasságra vonatkozó szavatosságot is. A Microsoft Corporation és annak beszállítói semmilyen körülmények között nem felelősek semminemű kárért, így a közvetlen, a közvetett, az üzleti haszon elmaradásából származó vagy speciális károkért, illetve a kár következményeként felmerülő költségek megtérítéséért, még abban az esetben sem, ha a Microsoft Corporationt vagy beszállítóit az ilyen károk bekövetkeztének lehetőségére figyelmeztették. Egyes államok joga nem teszi lehetővé bizonyos károkért a felelősség kizárását vagy korlátozását, ezért a fenti korlátozások az ön esetében esetleg nem alkalmazhatók.