2011-01-20 6 views
1

есть простая встроенная функция, которую я мог бы использовать для получения экземпляра даты из календаря/год-комбинации?Преобразование календарной недели в дату

Должно быть возможно ввести 10w2005 в TextBox, и я создам дату 07 March 2005.

Понедельник должен быть первым днем, а CalendarWeekRule должен быть первымFullWeek.

Мой первый подход:

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

Я добавил свое решение к моему вопросу. Спасибо, в любом случае. –

Смежные вопросы