2011-01-20 24 views
1

は、calendarweek/year-combinationから日付インスタンスを取得するために使用できる単純な組み込み関数ですか?カレンダー - 週を日付に変換する

TextBoxに10w2005を入力すると、07 March 2005という日付が作成されます。

月曜日が最初の日で、CalendarWeekRuleがFirstFullWeekである必要があります。

Dim w As Int32 = 10 
Dim y As Int32 = 2005 
Dim d As New Date(y, 1, 1) 
d = d.AddDays(7 * w) 

しかしFirstDay- CalendarWeekRuleが適用されないので、これは動作しません:

私の最初のアプローチでした。事前に

おかげ

編集

これは私が(リンクはfjdumontのおかげ)で終わってきたものである:

Public Shared Function FirstDateOfWeek(ByVal year As Integer, ByVal weekOfYear As Integer) As DateTime 
     Dim jan1 As New DateTime(year, 1, 1) 
     Dim daysOffset As Integer = CInt(Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek) - CInt(jan1.DayOfWeek) 
     Dim firstWeekDay As DateTime = jan1.AddDays(daysOffset) 
     Dim curCulture As System.Globalization.CultureInfo = System.Globalization.CultureInfo.CurrentCulture 
     Dim firstWeek As Integer = curCulture.Calendar.GetWeekOfYear(jan1, curCulture.DateTimeFormat.CalendarWeekRule, curCulture.DateTimeFormat.FirstDayOfWeek) 
     If firstWeek <= 1 Then 
      weekOfYear -= 1 
     End If 
     Return firstWeekDay.AddDays(weekOfYear * 7) 
End Function 

答えて

1

This threadが役立つはずです。このような文字列を解析する必要があります。

string[] spl = input.ToLower().Split("w"); 
int year = int.Parse(spl[1]); 
int week = int.Parse(spl[0]); 
+0

だから、答えは:簡単な組み込み関数がありません。ありがとう。 –

0
Dim dfi As Globalization.DateTimeFormatInfo = Globalization.DateTimeFormatInfo.CurrentInfo 
    Dim cal As Globalization.Calendar = dfi.Calendar 

    '10w2005 
    Dim w As Integer = 10 'week 
    Dim y As Integer = 2005 
    Dim d As DateTime = New DateTime(y, 1, 1) 

    If cal.GetWeekOfYear(d, Globalization.CalendarWeekRule.FirstFullWeek, DayOfWeek.Monday) <> 1 Then 
     w -= 1 
     d = d.AddDays(8 - d.DayOfWeek) 
    End If 

    d = d.AddDays(7 * w) 
    Debug.WriteLine(d.ToString) 
+0

自分の解決策を自分の質問に追加しました。とにかくありがとう。 –

関連する問題