Microsoft Access'te Tarih/Saat verilerini depolama, hesaplama ve karşılaştırma

Özet

Bu makalede, Microsoft Access'in Tarih/Saat veri türünü nasıl depolediği açıklanmaktadır. Bu makalede ayrıca tarihleri ve saatleri hesaplarken veya tarihlerle saatleri karşılaştırırken neden beklenmeyen sonuçlar alabileceğiniz açıklanır.

Bu makalede aşağıdaki konular açıklanmaktadır:

  • Tarih/Saat verilerini depolama
  • Tarih/Saat alanını biçimlendirme
  • Zaman verilerini hesaplama
  • Tarih verilerini karşılaştırma
  • Zaman verilerini karşılaştırma

Ek Bilgi

Tarih/Saat verilerini depolama

Access, Tarih/Saat veri türünü 15 ondalık basam aya kadar çift duyarlıklı, kayan noktalı bir sayı olarak depolar. Çift duyarlıklı sayının tamsayı bölümü tarihi temsil eder. Ondalık kısım saati temsil eder.

Geçerli tarih değerleri -657.434 (1 Ocak 100 M.D.) ile 2.958.465 (31 Aralık 9999 M.D.) arasında değişir. 0 tarih değeri 30 Aralık 1899'ı temsil eder. Access, 30 Aralık 1899'a kadar olan tarihleri negatif sayılar olarak depolar.

Geçerli saat değerleri 0,0 (00:00:00) ile 0,99999 (23:59:59) arasında değişir. Sayısal değer bir günün bir bölümünü temsil eder. Sayısal değeri 24 ile çarparak sayısal değeri saat, dakika ve saniyeye dönüştürebilirsiniz.

Aşağıdaki tabloda Access'in Tarih/Saat değerlerini nasıl depolayışı gösterilmektedir:

Çift sayı Tarih bölümü Gerçek tarih Zaman bölümü Gerçek saat
1.0 1 31 Aralık 1899, Cumartesi .0 12:00:00.
2.5 2 1 Ocak 1900 .5 12:00:00.
27468.96875 27468 15 Mart 1975, 1975 .96875 11:15:00
36836.125 36836 6 Kasım 2000, 2000 .125 03:00:00.

Access'in Tarih/Saat değerlerini sayı olarak depolama biçimini görüntülemek için, Hemen penceresine aşağıdaki komutları yazın, ENTER tuşuna basın ve ardından sonuçlara dikkat edin:

? CDbl(#5/18/1999 14:00:00#)

Sonuç eşittir: 36298.583333333

? CDbl(#12/14/1849 17:32:00#)

Sonuç eşittir: -18278.730555556

Sayısal değerlerin tarihini ve saatini görüntülemek için, Hemen penceresine aşağıdaki komutları yazın, ENTER tuşuna basın ve ardından sonuçlara dikkat edin:

? CVDate(1.375)

Sonuç eşittir: 31.12.1899 09:00:00

? CVDate(-304398.575)

Sonuç eşittir: 1/8/1066 1:48:00

Tarih/Saat alanını biçimlendirme

Tarih/Saat değerini, tarih, saat veya her ikisini birden görüntülemek için biçimlendirebilirsiniz. Yalnızca tarih biçimi kullandığınızda, Access saat bölümü için 0 değerini depolar. Yalnızca zaman biçimi kullandığınızda, Access tarih bölümü için 0 değerini depolar.

Aşağıdaki tabloda Access'in Tarih/Saat değerlerini nasıl depolayışı gösterilmektedir. Aşağıdaki tabloda, farklı biçimler kullanarak bu değerleri nasıl görüntüleyebileceğiniz de gösterilmektedir:

Depolanan değer (çift sayı) Varsayılan biçim (Genel Tarih) Özel biçim (aa/gg/yyyy ss:nn:ss A.M./P.M.)
36295.0 5/15/99 15.05.1999 12:00:00
0.546527777777778 13:07 30.12.1899 01:07:00
36232.9375 3/13/99 10:30 03/13/1999 10:30:00

Not Tarih/Saat değerinin varsayılan biçimi Genel Tarih'tir. Bir değer yalnızca tarihse, saat görüntülenmez. Değer yalnızca saat ise, tarih görüntülenmez.

Zaman verilerini hesaplama

Saat değeri 24 saatlik bir günün kesri olarak depolandığından, 24 saatten uzun zaman aralıklarını hesaplarken yanlış biçimlendirme sonuçları alabilirsiniz. Bu davranışa geçici bir çözüm olarak, zaman aralıklarının doğru biçimlendirildiğinden emin olmak için kullanıcı tanımlı bir işlev oluşturabilirsiniz.

Microsoft, programlama örneklerini yalnızca gösterim amacıyla sağlar; örtülü veya açık garanti vermez. Buna zımni garantiler, satılabilirlik veya belirli bir amaca uygunluk da dahildir, ancak bunlarla sınırlı değildir. Bu makale, gösterilen programlama dilini ve yordamları oluşturmak ve hata ayıklamak amacıyla kullanılan araçları kullanmayı bildiğinizi varsayar. Microsoft destek mühendisleri, belirli bir yordamın işlevselliğinin açıklanmasına yardımcı olabilir, ancak gereksinimlerinizi karşılamaya yönelik olarak ek işlevsellik sağlamak veya yordamlar geliştirmek amacıyla bu örnekleri değiştirmezler. Zaman aralıklarını doğru şekilde hesaplamak ve biçimlendirmek için şu adımları izleyin:

  1. Bir modül oluşturun ve aşağıdaki satır henüz yoksa Bildirimler bölümüne aşağıdaki satırı yazın:

    Seçenek Açık

  2. Aşağıdaki yordamı yazın:

    '------------------------------------------------------------------
    '  This function calculates the elapsed time between two values and then
    '  formats the result in four different ways.
    '
    '  The function accepts interval arguments such as the following:
    '
    '     #5/12/95 6:00:00AM# - #5/11/95 10:00:00PM#
    '
    '
    '
    '     [End Time]-[Start Time]
    '------------------------------------------------------------------
    
    Function ElapsedTime (Interval)
      Dim x
      x = Int(CSng(Interval * 24 * 3600)) & " Seconds"
      Debug.Print x
      x = Int(CSng(Interval * 24 * 60)) & ":" & Format(Interval, "ss") _
         & " Minutes:Seconds"
      Debug.Print x
      x = Int(CSng(Interval * 24)) & ":" & Format(Interval, "nn:ss") _
         & " Hours:Minutes:Seconds"
      Debug.Print x
      x = Int(CSng(Interval)) & " days " & Format(Interval, "hh") _
         & " Hours " & Format(Interval, "nn") & " Minutes " & _
         Format(Interval, "ss") & " Seconds"
      Debug.Print x
    
    End Function
    
  3. Anlık penceresine aşağıdaki satırı yazın ve ENTER tuşuna basın:

    ? ElapsedTime(#6/1/1999 8:23:00PM#-#6/1/1999 8:12:12AM#)

Aşağıdaki değerlerin göründüğüne dikkat edin:

43848 Seconds
730:48 Minutes:Seconds
12:10:48 Hours:Minutes:Seconds
0 days 12 Hours 10 Minutes 48 Seconds

Tarih verilerini karşılaştırma

Tarihler ve saatler çift duyarlıklı sayılar olarak birlikte depolandığından, Tarih/Saat verilerini karşılaştırırken beklenmeyen sonuçlar alabilirsiniz. Örneğin, Anlık penceresine aşağıdaki ifadeyi yazarsanız, bugünün tarihi 31/3/1999 olsa bile Bir False sonucu alırsınız:

? Now()=DateValue("3/31/1999")

Now() işlevi, geçerli tarihi ve geçerli saati temsil eden çift duyarlıklı bir sayı döndürür. Ancak DateValue() işlevi, kesirli saat değerini değil, tarihi temsil eden bir tamsayı döndürür. Bu nedenle, Now() yalnızca Now() 00:00:00 (12:00:00 A.M.) saati döndürdüğünde DateValue() değerine eşittir.

Tarih değerlerini karşılaştırırken doğru sonuçlar almak için aşağıdaki işlevlerden birini kullanın. Her işlevi test etmek için, hemen penceresine işlevi yazın, geçerli tarihi 31/31/1999 ile değiştirip ENTER tuşuna basın:

  • Tamsayı değeri döndürmek için Date() işlevini kullanın:

    ? Date()=DateValue("3/31/1999")

  • Now() işlevinin kesirli bölümünü kaldırmak için Int() işlevini kullanın:

    ? Int(Now())=DateValue("3/31/1999")

Zaman verilerini karşılaştırma

Zaman değerlerini karşılaştırdığınızda, bir zaman değeri çift duyarlıklı, kayan noktalı bir sayının kesirli parçası olarak depolandığından tutarsız sonuçlar alabilirsiniz. Örneğin, Anlık penceresine aşağıdaki ifadeyi yazarsanız, iki saat değeri aynı görünse bile yanlış (0) bir sonuç alırsınız:

var1 = #2:01:00 PM#

var2 = DateAdd("n", 10, var1)

? var2 = #2:11:00 PM#

Access bir zaman değerini kesire dönüştürdüğünde, hesaplanan sonuç saat değeriyle aynı olmayabilir. Hesaplamanın neden olduğu küçük fark, depolanan bir değeri sabit bir değerle karşılaştırdığınızda yanlış (0) sonuç üretmek için yeterlidir.

Zaman değerlerini karşılaştırırken doğru sonuçlar almak için aşağıdaki yöntemlerden birini kullanın. Her yöntemi test etmek için, hemen penceresine her yöntemi yazın ve ENTER tuşuna basın:

Saat karşılaştırmasına ilişkili bir tarih ekleyin:

var1 = #1/1/99 2:01:00#

var2 = DateAdd("n", 10, var1)

? var2 = #1/1/99 2:11:00#

Zaman değerlerini karşılaştırmadan önce dize veri türlerine dönüştürün:

var1 = #2:01:00 PM#

var2 = DateAdd("n", 10, var1)

? CStr(var2) = CStr(#2:11:00 PM#)

Saniye gibi kesin birimleri karşılaştırmak için DateDiff() işlevini kullanın:

var1 = #2:01:00 PM#

var2 = DateAdd("n", 10, var1)

? DateDiff("s", var2, #2:11:00 PM#) = 0

Başvurular

Tarih değerlerini ve saat değerlerini hesaplama hakkında daha fazla bilgi için bkz. DateSerial İşlevi

Tarih/Saat veri türlerini biçimlendirme hakkında daha fazla bilgi için, Yardım menüsünde Microsoft Access Yardımı'na tıklayın, format özelliği - Office Yardımcısı'na veya Yanıt Sihirbazı'na tarih/saat veri türü yazın ve ardından konuyu görüntülemek için Ara'ya tıklayın.