1

我的表 TimeTable 中有 2 列

  1. start_date(格式为DD-MM-YYYY
  2. end_date

如果我从我的登录页面登录,我想检查当前日期是否在start_date和之间end_date;如果是这样,我可以登录。

如何在 C#..asp.net.. 中进行比较?

我已成功在登录页面中打印当前日期。

lblMsg.Text= DateTime.Now.ToString("dd-MM-yyyy");  

我在 c# 中使用 asp.net

      start_date              end_date
8/2/2013 12:00:00 AM    10/2/2013 12:00:00 AM

以 DD/MM/YYYY 格式存储日期的代码

CultureInfo 提供者 = CultureInfo.InvariantCulture;

        DateTime startdate = DateTime.ParseExact(tbstartdate.Text.ToString().Trim(), "dd/MM/yyyy", provider);
        DateTime enddate = DateTime.ParseExact(tbenddate.Text.ToString().Trim(),"dd/MM/yyyy",provider);
        string sql = "INSERT INTO TimeTable(start_date,end_date)"
     + "VALUES (@startdate,@enddate)";
        SqlConnection conn = new SqlConnection(ConnectionString);
        conn.Open();
        SqlCommand cmd = new SqlCommand(sql, conn);

        cmd.Parameters.Add("@startdate", SqlDbType.DateTime).Value = startdate;
        cmd.Parameters.Add("@enddate", SqlDbType.DateTime).Value = enddate;

        cmd.Prepare();
        n = cmd.ExecuteNonQuery();

        conn.Close();

登录页面查看日期代码

CultureInfo 提供者 = CultureInfo.InvariantCulture;

        DateTime date = DateTime.ParseExact(DateTime.Now.ToString("dd/mm/yyyy"), "dd/MM/yyyy", provider);
      //  DateTime date=DateTime.Now.ToString("dd/mm/yyyy");

        string query1 = "select * from TimeTable where ((start_date >= @date1 and End_date<= @date2) and UserType=@type)";
        SqlConnection conn = new SqlConnection(ConnectionString);
        conn.Open();
        SqlCommand com = new SqlCommand(query1, conn);
        com.Parameters.Add("@type",dpusertype.SelectedItem.Text.ToString());
        com.Parameters.Add("@date1",date);
        com.Parameters.Add("@date2", date);
        com.CommandType = CommandType.Text;
        SqlDataAdapter da = new SqlDataAdapter(com);
        DataTable dt = new DataTable();
        da.Fill(dt);

`if (dt.Rows.Count > 0) // 比较表中的用户

        {

            FormsAuthentication.RedirectFromLoginPage(txtFcode.Text, Persist.Checked);
            Response.Redirect("~/DeptCoordinator/DeptCoordinator_homepage.aspx");  
        }

出现错误

日历 System.Globalization.GregorianCalendar 不支持字符串表示的 DateTime。描述`

4

2 回答 2

3

假设您已经从表中加载了 start_date 和 end_from。然后

var now = DateTime.Now.Date;
var allowLogin = start_date <= now && now <= end_date;
于 2013-02-08T04:29:22.137 回答
0

DateTime.Ticks会占时间。
使用.TicksDateTime您的日期转换为longs.
然后只需使用一个简单的 if stmt 来查看您的目标日期是否介于两者之间。

var now = DateTime.Now.Date;

 // Assuming you know d2 > d1
if (now .Ticks > start_date.Ticks && now.Ticks < end_date.Ticks)
{
    // targetDt is in between d1 and d2
}  

编辑 1

但我建议你在database而不是比较它c#

   select 
        columnName1, 
        columnName2,
        ....
   from 
       tableName
   where
       GETDATE() between start_date and end_date;

一些有用的链接:-
在 DateTime 字段中的两个日期之间进行选择 - SQL Server
检查 datetime 实例是否位于其他两个 datetime 对象之间

于 2013-02-08T04:41:01.380 回答