与同一方法的时差

时间:2013-11-13 16:52:12

标签: asp.net datetime

我最近已经就我遇到的时间问题提出了一些问题,我得到了SO成员的一些好帮助。但我仍有一些问题,我无法解决。 我在我网站的主页上有这个片段:

private string Datetime()
{
    DateTime nowutc = DateTime.UtcNow;
    var cet = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
    var nowcet = TimeZoneInfo.ConvertTimeFromUtc(nowutc, cet);
    return nowcet.ToString("F");
}

它工作正常。我得到了标签上显示的正确时间。

我在登录页面中的方法基本相同,但它没有在数据库中返回正确的时间(nowcet)。

 public static void UserLogin(string iPaddress, string uname)
{  
    DateTime nowutc = DateTime.UtcNow;
    var cet = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
    var nowcet = TimeZoneInfo.ConvertTimeFromUtc(nowutc, cet);
    const int MaxLength = 46;
    if (uname.Length > MaxLength)
        uname = uname.Substring(0, MaxLength);

    string getconnstring = ConfigurationManager.ConnectionStrings["xxx"].ConnectionString;
    SqlConnection conn = new SqlConnection(getconnstring);
    conn.Open();
    string ssql = "insert into Logins (IP, uname, dateTime) values ('" +
                  iPaddress + "','" +
                  uname + "','" +
               nowcet.ToString() + "')";//HERE IS WHERE I WRITE THE TIME TO THE DB
    SqlCommand cmd = new SqlCommand(ssql, conn);
    cmd.ExecuteNonQuery();
    conn.Close();
}

我得到的差异恰好是3个小时。如果标签显示下午4:30,则db存储在晚上7:30。此问题仅发生在生产服务器(共享主机)上,本机在我的机器上不会发生。 我不明白为什么会发生这样的事情。任何提示?

1 个答案:

答案 0 :(得分:1)

绝不是这就是你问题的答案。这只是如何将参数传递给sql的一个示例。

string getconnstring = ConfigurationManager.ConnectionStrings["xxx"].ConnectionString;
using (var conn = new SqlConnection(getconnstring))
{
    conn.Open();
    string ssql = "insert into Logins (IP, uname, dateTime) values (@iPaddress, @uname, @dateTime)";

    using (var cmd = new SqlCommand(ssql, conn))
    {
        cmd.Parameters.Add("@iPaddress", SqlDbType.VarChar, 50).Value = iPaddress; // make sure the type and size match with what in the db schema
        cmd.Parameters.Add("@uname", SqlDbType.VarChar, 50).Value = uname;  // make sure the type and size match with what in the db schema
        cmd.Parameters.Add("@dateTime", SqlDbType.DateTime).Value = nowcet;

        cmd.ExecuteNonQuery();
    }
}