DateTime.Now.ToString()时区问题

时间:2019-05-23 09:06:54

标签: c# azure-sql-database

我在Azure-App Services中上传了一个Web表单,该表单链接到Azure-Sql数据库。

用户创建记录时,aspx.cs会生成一个字符串并存储在SQL Server中。

cmd.Parameters.AddWithValue("@ModifyDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

当我在本地运行代码时,日期和时间正确运行。但是,当我在URL中运行它时,似乎新记录总是迟到8个小时。 (exp:我保存在  2019-5-23 15:00:00,SQL记录成为2019-5-23 7:00:00)由于我位于台湾(GMT +8),所以我知道它与时区有关。

通常,我将花费数小时来测试代码,但这次不会,因为该错误无法在本地修复,并且多次发布应用程序非常耗时。

sql = ("INSERT INTO MOrder (OrderDate, BranchID, SupplierID, ModifyDate) VALUES (@OrderDate, @Branch, @Supplier,@ModifyDate)");
            using (SqlCommand cmd = new SqlCommand(sql, cnn))
            {
                cmd.Parameters.AddWithValue("@OrderDate", datebox.Text);
                cmd.Parameters.AddWithValue("@ModifyDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                cmd.Parameters.AddWithValue("@Branch", Session["Gbranch"].ToString());
                cmd.Parameters.AddWithValue("@Supplier", Session["Gsuply"].ToString());
                cmd.ExecuteNonQuery();
            }

有人可以修改我的代码,以便可以正确存储时间字符串吗?谢谢。

2 个答案:

答案 0 :(得分:1)

在将其转换为字符串之前,将时间更改为UTC。 更改此代码:

cmd.Parameters.AddWithValue("@ModifyDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

cmd.Parameters.AddWithValue("@ModifyDate", DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ss"));

当您从服务器读取日期字符串时,需要按照以下方式将其转换回本地时间。

TimeZone.CurrentTimeZone.ToLocalTime(Convert.ToDateTime("UTC Date time string"))

答案 1 :(得分:0)

我尝试了DateTime.Now / DateTime.Now.ToUniversalTime / DateTime.UtcNow,显然它们都生成相同的值。 (尽管您当前是时区,但总是GMT +0)

我通过手动添加8小时来解决此问题。

这是我修改后的代码(我在台湾,格林尼治标准时间+8)

cmd.Parameters.AddWithValue("@ModifyDate", DateTime.UtcNow.AddHours(8).ToString("yyyy-MM-dd HH:mm:ss"));

谢谢大家的帮助/推荐。