Standart ISO 8601 göre tarihi hafta sayısını belirlerken, Oleaut32.dll dosyasının temel işlevi çağrısı belirli bir yılda yanlışlıkla haftası 53 yerine geçen Pazartesi haftanın 1 döndürür.
ISO 8601 standart Avrupa'daki yaygın olarak kullanılır ve aşağıdakileri içerir:
ISO 8601 "Data elements and interchange formats - Information interchange - Representation of dates and times"
ISO 8601 : 1988 (E) paragraph 3.17:
"week, calendar: A seven day period within a calendar year, starting
on a Monday and identified by its ordinal number within the year;
the first calendar week of the year is the one that includes the
first Thursday of that year. In the Gregorian calendar, this is
equivalent to the week which includes 4 January."
Takvim hafta içinde Bu kurallar uygulayarak bu uygulanabilir:
Bir yıl içinde 52 veya 53 Takvim haftalar bölünür.
Takvimi haftada 7 gün var. Pazartesi günü, 1, Pazar 7 gündür.
Ilk yılda bir takvim haftası en az 4 gün içeren kullanılır.
Yılda bir Pazar günü sonuçlandı, 1-3, son gün sonraki yılın ilk takvim haftası ait veya geçerli yılın son takvim haftası ilk 1-3 gün, gelecek yıla ait.
Yalnızca başlangıç veya üzerinde bir Perşembe concluding yılda 53 Takvim haftalar vardır.
Visual Basic ve Visual Basic for Applications, Oleaut32.dll dosyasının çağrıları DateSerial işlevi haricinde tüm tarih işlevselliği gelir. Format() hem DatePart() işlevleri için verilen tarih takvim haftası numarası dönmek için her ikisi de bu hata tarafından etkilenir. Bu sorunun oluşmaması için <a0></a0>, bu makalede sağlayan diğer kod kullanmanız gerekir.
Proje standart exe DOSYASı, Visual Basic'te başlatın. Varsayılan olarak, Form1 oluşturulur.
Iki CommandButtons Form1'e ekleyin.
Aşağıdaki kodu Form1 kodu penceresine yapıştırın:
Option Explicit
Private Sub Command1_Click()
' This code tests a "problem" date and the days around it
Dim DateValue As Date
Dim i As Integer
Debug.Print " Format function:"
DateValue = #12/27/2003#
For i = 1 To 4 ' examine the last 4 days of the year
DateValue = DateAdd("d", 1, DateValue)
Debug.Print "Date: " & DateValue & " Day: " & _
Format(DateValue, "ddd") & " Week: " & _
Format(DateValue, "ww", vbMonday, vbFirstFourDays)
Next i
End Sub
Private Sub Command2_Click()
' This code lists all "Problem" dates within a specified range
Dim MyDate As Date
Dim Years As Long
Dim days As Long
Dim woy1 As Long
Dim woy2 As Long
Dim ToPrint As String
For Years = 1850 To 2050
For days = 0 To 3
MyDate = DateSerial(Years, 12, 28 + days)
woy1 = Format(MyDate, "ww", vbMonday, vbFirstFourDays)
woy2 = Format(MyDate, "ww", vbMonday, vbFirstFourDays)
If woy2 > 52 Then
If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then _
woy2 = 1
End If
If woy1 <> woy2 Then
ToPrint = MyDate & String(13 - Len(CStr(MyDate)), " ")
ToPrint = ToPrint & Format(MyDate, "dddd") & _
String(10 - Len(Format(MyDate, "dddd")), " ")
ToPrint = ToPrint & woy1 & String(5 - Len(CStr(woy1)), " ")
ToPrint = ToPrint & woy2
Debug.Print ToPrint
End If
Next days
Next Years
End Sub
CTRL tuşunu basılı tutun ve bir komut penceresi açmak için G tuşuna basın.
Projeyi çalıştırın Command1 üzerinde tıklatın ve komut penceresinde aşağıdaki sonuçları Not:
böylece başlangıç haftası 1 hafta 53 parçası değil ve 29/12/2003 olarak nitelendirilmesi gereken Not, bu biçimi, tüm Hafta Pazartesi ile başlatın.
Belirtilen aralık içinde bu sorunla karşılaşan tarihlerin bir listesini görmek için Command2 üzerinde ek Yardım düğmesini tıklatın. Liste içerir tarih, haftanın günleri gün (Pazartesi her zaman) # <a1>Biçim</a1> (53) ve döndürmesi gereken hafta sayısını (1). Örneğin:
Biçimi veya DatePart işlevlerini kullanmak, 53, olduğunda başka bir denetim yapmak ve 1, satır başı zorunlu dönüş değeri denetleyin ve yeniden yüklemek, gerekirse gerekir. Bu kod örneği, bunu yapmanın bir yolu gösterir:
Function WOY (MyDate As Date) As Integer ' Week Of Year
WOY = Format(MyDate, "ww", vbMonday, vbFirstFourDays)
If WOY > 52 Then
If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then WOY = 1
End If
End Function
yukarıda ISO 8601 kurallarını kullanan kodu yazarak hafta numarasını belirlemek için bu işlevleri kullanarak önleyebilirsiniz. Aşağıdaki örnek, hafta sayısını döndürmek için yedek işlev gösterir.
Proje standart exe DOSYASı, Visual Basic'te başlatın. Varsayılan olarak, Form1 oluşturulur.
Proje menüsünden, yeni bir modül ekleyin ve aşağıdaki kodu yapıştırın:
Option Explicit
Function WeekNumber(InDate As Date) As Integer
Dim DayNo As Integer
Dim StartDays As Integer
Dim StopDays As Integer
Dim StartDay As Integer
Dim StopDay As Integer
Dim VNumber As Integer
Dim ThurFlag As Boolean
DayNo = Days(InDate)
StartDay = Weekday(DateSerial(Year(InDate), 1, 1)) - 1
StopDay = Weekday(DateSerial(Year(InDate), 12, 31)) - 1
' Number of days belonging to first calendar week
StartDays = 7 - (StartDay - 1)
' Number of days belonging to last calendar week
StopDays = 7 - (StopDay - 1)
' Test to see if the year will have 53 weeks or not
If StartDay = 4 Or StopDay = 4 Then ThurFlag = True Else ThurFlag = False
VNumber = (DayNo - StartDays - 4) / 7
' If first week has 4 or more days, it will be calendar week 1
' If first week has less than 4 days, it will belong to last year's
' last calendar week
If StartDays >= 4 Then
WeekNumber = Fix(VNumber) + 2
Else
WeekNumber = Fix(VNumber) + 1
End If
' Handle years whose last days will belong to coming year's first
' calendar week
If WeekNumber > 52 And ThurFlag = False Then WeekNumber = 1
' Handle years whose first days will belong to the last year's
' last calendar week
If WeekNumber = 0 Then
WeekNumber = WeekNumber(DateSerial(Year(InDate) - 1, 12, 31))
End If
End Function
Function Days(DayNo As Date) As Integer
Days = DayNo - DateSerial(Year(DayNo), 1, 0)
End Function
Bir KomutDüğmesi Form1'e ekleyin.
Aşağıdaki kodu Form1 kodu penceresine yapıştırın:
Private Sub Command1_Click()
Dim DateValue As Date, i As Integer
Debug.Print " WeekNumber function:"
DateValue = #12/27/2003#
For i = 1 To 4 ' examine the last 4 days of the year
DateValue = DateAdd("d", 1, DateValue)
Debug.Print "Date: " & DateValue & " Day: " & _
Format(DateValue, "ddd") & " Week: " & WeekNumber(DateValue)
Next i
End Sub
CTRL tuşunu basılı tutun ve bir komut penceresi açmak için G tuşuna basın.
Projeyi çalıştırın ve komut penceresinde aşağıdaki sonuçları görmek için Command1 tıklatın:
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:200299
(http://support.microsoft.com/kb/200299/en-us/
)
Bu makaleyi kullanmak için ne kadar kişisel çaba harcadınız?
Çok az
Az
Orta
Fazla
Çok fazla
Bu bilgiyi geliştirmemiz için nedenleri ve bu konuda neler yapabileceğimizi paylaşın
Teşekkürler! Görüşleriniz, destek içeriğimizi geliştirmemize yardımcı olmak için kullanılmaktadır. Diğer yardım seçenekleri için, lütfen Yardım ve Destek Giriş Sayfasını ziyaret edin.