为了账号安全,请及时绑定邮箱和手机立即绑定

从周数计算日期

从周数计算日期

C#
跃然一笑 2019-12-18 18:13:45
从周数计算日期任何人都知道一个简单的方法来获得一周中的第一天的日期(在欧洲的星期一)。我知道年份和周数?我要用C#来做这个。
查看完整描述

3 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

我对@HenkHolterman的解决方案有异议,甚至对@RobinAndersson的解决方案也有异议。

阅读ISO 8601标准很好地解决了这个问题。把第一个星期四作为目标,而不是星期一。下面的代码也适用于2009年的第53周。

public static DateTime FirstDateOfWeekISO8601(int year, int weekOfYear){
    DateTime jan1 = new DateTime(year, 1, 1);
    int daysOffset = DayOfWeek.Thursday - jan1.DayOfWeek;

    // Use first Thursday in January to get first week of the year as
    // it will never be in Week 52/53
    DateTime firstThursday = jan1.AddDays(daysOffset);
    var cal = CultureInfo.CurrentCulture.Calendar;
    int firstWeek = cal.GetWeekOfYear(firstThursday, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

    var weekNum = weekOfYear;
    // As we're adding days to a date in Week 1,
    // we need to subtract 1 in order to get the right date for week #1
    if (firstWeek == 1)
    {
        weekNum -= 1;
    }

    // Using the first Thursday as starting week ensures that we are starting in the right year
    // then we add number of weeks multiplied with days
    var result = firstThursday.AddDays(weekNum * 7);

    // Subtract 3 days from Thursday to get Monday, which is the first weekday in ISO8601
    return result.AddDays(-3);}



查看完整回答
反对 回复 2019-12-19
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

最简单的方法可能是找到一年中的第一个星期一,然后加上相关的周数。这是一些示例代码。顺便说一句,它假设一个星期数从1开始:

using System;class Test{
    static void Main()
    {
        // Show the third Tuesday in 2009. Should be January 20th
        Console.WriteLine(YearWeekDayToDateTime(2009, DayOfWeek.Tuesday, 3));
    }

    static DateTime YearWeekDayToDateTime(int year, DayOfWeek day, int week)
    {
        DateTime startOfYear = new DateTime (year, 1, 1);

        // The +7 and %7 stuff is to avoid negative numbers etc.
        int daysToFirstCorrectDay = (((int)day - (int)startOfYear.DayOfWeek) + 7) % 7;

        return startOfYear.AddDays(7 * (week-1) + daysToFirstCorrectDay);
    }}



查看完整回答
反对 回复 2019-12-19
  • 3 回答
  • 0 关注
  • 292 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信