2011-01-20 135 views
1

是否有一个简单的内置函数,可以用来从日历/年度组合中获取日期实例?将日历转换为日期

应该可以在文本框中输入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

所以答案是:有没有简单的内置函数。谢谢。 – 2011-01-20 13:01:16

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

我已将我的解决方案添加到了我的问题中。不管怎么说,还是要谢谢你。 – 2011-01-21 14:22:03