我在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();
}
有人可以修改我的代码,以便可以正确存储时间字符串吗?谢谢。
答案 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"));
谢谢大家的帮助/推荐。