C# 如何在两个日期之间获取数据

C# 如何在两个日期之间获取数据,c#,sql,C#,Sql,我希望获得两年的数据,因此从1月1日到1月1日,我所做的就是: public list<a>method(){ DateTime d= new DateTime(DateTime.Now.Year, 01, 1); DateTime dd= new DateTime(DateTime..Year, 01, 1); <- instead 'now' what is the syntax for next year? SqlCommand command =

我希望获得两年的数据,因此从1月1日到1月1日,我所做的就是:

public list<a>method(){
    DateTime d= new DateTime(DateTime.Now.Year, 01, 1);
    DateTime dd= new DateTime(DateTime..Year, 01, 1); <- instead 'now' what is the syntax for next year?
    SqlCommand command = new SqlCommand("SELECT TOP 100 ID FROM TableNameWHERE Time Between @Time AND @Time1 ORDER BY Time OFFSET 10 ROWS FETCH NEXT 100 ROWS ONLY", conn);
    command.Parameters.AddWithValue("@Time", d);
    command.Parameters.AddWithValue("@Time1", dd);
}

如果你只想要来年,很简单:

// Note: more descriptive variable names than "d" and "dd"
int thisYear = DateTime.Now.Year; // Note this is in the local time zone...
DateTime thisYearStart = new DateTime(thisYear, 1, 1);
DateTime nextYearStart = new DateTime(thisYear + 1, 1, 1);
或:

请注意关于时区的注释-如果您想要UTC年份,请使用UtcNow,在这种情况下,您可能还需要指定UTC的DateTimeKind

编辑:这是假设您可以使用包含的开始时间和独占的结束时间。这通常是一种很好的工作方式,因为下一个包含的开始时间最终是当前的独占结束时间,您不需要担心粒度。但是,如果希望将当前年份的最后一个勾号作为包含上限,可以使用:

int thisYear = DateTime.Now.Year;
DateTime thisYearStart = new DateTime(thisYear, 1, 1);
DateTime thisYearEnd = thisYearStart.AddYears(1).AddTicks(-1);

如果你只想要来年,很简单:

// Note: more descriptive variable names than "d" and "dd"
int thisYear = DateTime.Now.Year; // Note this is in the local time zone...
DateTime thisYearStart = new DateTime(thisYear, 1, 1);
DateTime nextYearStart = new DateTime(thisYear + 1, 1, 1);
或:

请注意关于时区的注释-如果您想要UTC年份,请使用UtcNow,在这种情况下,您可能还需要指定UTC的DateTimeKind

编辑:这是假设您可以使用包含的开始时间和独占的结束时间。这通常是一种很好的工作方式,因为下一个包含的开始时间最终是当前的独占结束时间,您不需要担心粒度。但是,如果希望将当前年份的最后一个勾号作为包含上限,可以使用:

int thisYear = DateTime.Now.Year;
DateTime thisYearStart = new DateTime(thisYear, 1, 1);
DateTime thisYearEnd = thisYearStart.AddYears(1).AddTicks(-1);

我刚刚在第二次约会中修改了你的代码 您修改的代码:

    DateTime d = new DateTime(DateTime.Now.Year, 01, 1);
    DateTime dd = new DateTime(DateTime.Today.Year + 1 , 01, 1); //Without "Now" you can used today and add +1 which will return the next year integer value
    SqlCommand command = new SqlCommand("SELECT TOP 100 ID FROM TableName WHERE Time Between @Time AND @Time1 ORDER BY Time OFFSET 10 ROWS FETCH NEXT 100 ROWS ONLY", conn);
    command.Parameters.AddWithValue("@Time", d);
    command.Parameters.AddWithValue("@Time1", dd);

您也可以使用此方法返回完整日期,如今年/月/日。您需要再添加一条语句以获取年份

    DateTime nextYearDate = DateTime.Now.AddYears(1);
现在在DateTime dd中使用此日期

    DateTime dd = new DateTime(nextYearDate,01,1);

我刚刚在第二次约会中修改了你的代码 您修改的代码:

    DateTime d = new DateTime(DateTime.Now.Year, 01, 1);
    DateTime dd = new DateTime(DateTime.Today.Year + 1 , 01, 1); //Without "Now" you can used today and add +1 which will return the next year integer value
    SqlCommand command = new SqlCommand("SELECT TOP 100 ID FROM TableName WHERE Time Between @Time AND @Time1 ORDER BY Time OFFSET 10 ROWS FETCH NEXT 100 ROWS ONLY", conn);
    command.Parameters.AddWithValue("@Time", d);
    command.Parameters.AddWithValue("@Time1", dd);

您也可以使用此方法返回完整日期,如今年/月/日。您需要再添加一条语句以获取年份

    DateTime nextYearDate = DateTime.Now.AddYears(1);
现在在DateTime dd中使用此日期

    DateTime dd = new DateTime(nextYearDate,01,1);

你试过在线文档吗?也许你可以在这里找到相关的答案:你试过在线文档了吗?也许你可以在这里找到相关的答案:@Jon Skeet要了解你做了什么,我有一个问题-你已经包括了1个,那就是几个月。因此,如果我在寻找12月之间的数据,我是否将其写为DateTime thisYearStart=new DateTime ThisYear,12,12;DateTime nextYearStart=今年的新日期时间+12,12,12@用户911:这取决于两者之间的区别——是包含性的还是独占性的。如果是独家的,你已经很好了。如果包含,只需使用.AddTicks-1获取上一年的最后一个刻度。将编辑答案。Makes seance,谢谢。此方法是否需要将日期格式化为yyyy/mm/dd,因为当前我获取的日期为mm/dd/yyyy-我的查询是以cte作为选择行编号,按ID排序,fname,sname作为行,*FROM TableName WHERE Time>@Time@user911:不,您根本不需要将其转换为字符串。您应该能够将参数值指定为DateTime。尽可能避免字符串转换。@Jon Skeet要了解您所做的工作,我有一个问题-您已经包含了1,这就是月份。因此,如果我在寻找12月之间的数据,我是否将其写为DateTime thisYearStart=new DateTime ThisYear,12,12;DateTime nextYearStart=今年的新日期时间+12,12,12@用户911:这取决于两者之间的区别——是包含性的还是独占性的。如果是独家的,你已经很好了。如果包含,只需使用.AddTicks-1获取上一年的最后一个刻度。将编辑答案。Makes seance,谢谢。此方法是否需要将日期格式化为yyyy/mm/dd,因为当前我获取的日期为mm/dd/yyyy-我的查询是以cte作为选择行编号,按ID排序,fname,sname作为行,*FROM TableName WHERE Time>@Time@user911:不,您根本不需要将其转换为字符串。您应该能够将参数值指定为DateTime。尽可能避免字符串转换。