如何在C#中将workweek double转换为DateTime

时间:2014-05-27 21:50:19

标签: c# datetime

我有一个工作周号码(1到52之间的数字),我想将其转换为日期。

例如:

3.1 = 01/13/2014

22.4 = 05/29/2014

我公司使用工作周,周一为.1,周二为.2等(周六和周日为.6和.7)

有人知道这样做的插件吗?如果我不需要,我不想重新发明轮子。

更新

这是我正在谈论的日历的视觉效果。工作周每年都有所不同,这可能会带来挑战。感谢

enter image description here

1 个答案:

答案 0 :(得分:4)

蛮力方法,可能会做得更好

查找一年中第一天之前的星期一,这是第1周 现在将转换周数乘以7 - 1(我们不要从零开始),添加天数减去1并将值传递给AddDays以查找所需的确切日期

void Main()
{
    string k = "22.4";
    Console.WriteLine(ConvertWeekDay(k, 2014).ToString());
    k = "53.1";
    Console.WriteLine(ConvertWeekDay(k, 2014).ToString());
    k = "1.1";
    Console.WriteLine(ConvertWeekDay(k, 2015).ToString());
}

public DateTime ConvertWeekDay(string weekday, int year)
{
    int w; int d;
    string[] wd = weekday.Split(new char[] {'.'});
    w = int.Parse(wd[0]); d = int.Parse(wd[1]);
    DateTime dt = new DateTime(year,1,1);
    while(dt.DayOfWeek != DayOfWeek.Monday)
        dt = dt.AddDays(-1);

    dt = dt.AddDays(7 * (w - 1) + d - 1);
    return dt;
}

请注意,如果您更改年份,53.1和1.1指的是同一天。