如何获取某一年某一天的某一天?

时间:2011-08-31 18:41:51

标签: c# sql-server-2005

我希望在sql sever 2005或c#中获取2011年9月的星期日日期。 所以结果应该是 2011年4月9日 11/9/2011 18/9/2011 25/9/2011

4 个答案:

答案 0 :(得分:2)

首先,我会在当月的第一天创建一个DateTime

从那里,我选择DayOfWeek属性,做一些数学运算(减去/加)以找到与你想要的日期匹配的那一周的正确日期。

从那里开始,我会继续调用DateTime.AddDays(7),然后返回这些值,直到月份属性翻转为止。

我会编写一个执行此操作的函数,需要一年,一个月和一个DayOfWeek。每个值都会返回IEnumerable<DateTime>yield return

这样的事情:

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        foreach (var date in DayOfWeek.Monday.OccurrencesInMonth(year: 2011, month: 8))
        {
            Console.WriteLine(date);
        }
    }
}

public static class DayOfWeekExtensions
{
    public static IEnumerable<DateTime> OccurrencesInMonth(this DayOfWeek targetDayOfWeek, int year, int month)
    {
        var firstDayInYear = new DateTime(year, month, 1);
        var currentDay = firstDayInYear.Next(targetDayOfWeek);

        while (currentDay.Month == month)
        {
            yield return currentDay;
            currentDay = currentDay.AddDays(7);
        }
    }
}

public static class DateTimeExtensions
{
    public static DateTime Next(this DateTime current, DayOfWeek dayOfWeek)
    {
        int offsetToNextOccurrence = dayOfWeek - current.DayOfWeek;
        if (offsetToNextOccurrence < 0)
            offsetToNextOccurrence += 7;
        return current.AddDays(offsetToNextOccurrence);
    }
}
  

8/1/2011 12:00:00 AM   8/8/2011 12:00:00 AM   8/15/2011 12:00:00 AM   8/22/2011 12:00:00 AM   8/29/2011 12:00:00 AM

答案 1 :(得分:0)

.NET C#

DateTime dateValue = new DateTime(2008,6,11); Console.WriteLine((int)dateValue.DayOfWeek); //显示3

从MSDN上搜索

答案 2 :(得分:0)

我真的不明白你想要什么。但我会回答,因为我认为我理解。

我们在您的代码中执行此操作的所有内容: 此代码适用于C#

DateTime time = DateTime.Now;

string timenow;

你可以这样做 - timenow = time.timeofday.tostring(); 女巫将给我们:21:44:15.3487 或者我们可以做 - timenow = time.ToLongDateString(); 它会给我们约会。

还有Time.ToShortDateString();。

只需使用您认为需要的功能即可。

在SQL中,你可以做“GetDate()”。

我想我有所帮助,如果我这样做很高兴:)

答案 3 :(得分:0)

您可以尝试这样的事情:

DECLARE @Date DATETIME
SELECT @Date = '20110801' 

SELECT  DATEADD(dd, number, @Date) Date
FROM    master..spt_values
WHERE   YEAR(DATEADD(dd, number, @Date)) = YEAR(@Date) AND MONTH(DATEADD(dd, number, @Date)) = MONTH(@Date) AND DATEPART(dw, DATEADD(dd, number, @Date)) = 1
        AND [Type] = 'p'