问题解析日期显示不正确的日期
Issue Parsing Date Showing Incorrect Date
我有一个生成今天日期的 JS 函数:
function GetDate(date) {
var today = new Date();
var dd = String(today.getDate()).padStart(2, '0');
var mm = String(today.getMonth() + 1).padStart(2, '0');
var yyyy = today.getFullYear();
today = dd + '/' + mm + '/' + yyyy;
alert(today);
return today; // 13/03/2021
}
这个函数returns13/03/2021
我将它传递给服务器端代码并执行此操作:
DateTime dateToday = DateTime.ParseExact(cdate, "dd/MM/yyyy", CultureInfo.GetCultureInfo("en-AU"));
emailCopy = emailCopy.Replace("{date}", dateToday.ToString("dd MMMM yyyy"));
但是这里将日期设置为 12 March 2021
为什么要这样做?进去的日期明明是13/03/2021
。同样在下一行中,我将此日期添加到 SQL 服务器 Table:
dateToday.ToString("yyyy-MM-dd")
添加到数据库的日期也是正确的:2021-03-13.
当您创建一个新的 DateTime
对象时,但只设置了它的日期部分,这会将时间设置为 00:00:00(午夜)。这是格林威治标准时间。因此,当您格式化日期时,它会采用您在午夜设置的日期,并将其转换为您的时区,这实际上是前一天。
您可以通过执行以下“kludge”来解决此问题:
var now = DateTime.Now;
var adjusted = new DateTime(
dateToday.Year, dateToday.Month, dateToday.Day, now.Hour, now.Minute, now.Second);
var final = adjusted.ToString("dd MMMM yyyy");
不过,可能有更好的方法。
ETA
您应该考虑使用 JavaScript 的 Date.toISOString()
而不是只发送日期。然后在C#中,使用Convert.ToDateTime()
来解析。它使用 UTC,您可以保证获得客户端机器生成日期的准确时间。
我有一个生成今天日期的 JS 函数:
function GetDate(date) {
var today = new Date();
var dd = String(today.getDate()).padStart(2, '0');
var mm = String(today.getMonth() + 1).padStart(2, '0');
var yyyy = today.getFullYear();
today = dd + '/' + mm + '/' + yyyy;
alert(today);
return today; // 13/03/2021
}
这个函数returns13/03/2021
我将它传递给服务器端代码并执行此操作:
DateTime dateToday = DateTime.ParseExact(cdate, "dd/MM/yyyy", CultureInfo.GetCultureInfo("en-AU"));
emailCopy = emailCopy.Replace("{date}", dateToday.ToString("dd MMMM yyyy"));
但是这里将日期设置为 12 March 2021
为什么要这样做?进去的日期明明是13/03/2021
。同样在下一行中,我将此日期添加到 SQL 服务器 Table:
dateToday.ToString("yyyy-MM-dd")
添加到数据库的日期也是正确的:2021-03-13.
当您创建一个新的 DateTime
对象时,但只设置了它的日期部分,这会将时间设置为 00:00:00(午夜)。这是格林威治标准时间。因此,当您格式化日期时,它会采用您在午夜设置的日期,并将其转换为您的时区,这实际上是前一天。
您可以通过执行以下“kludge”来解决此问题:
var now = DateTime.Now;
var adjusted = new DateTime(
dateToday.Year, dateToday.Month, dateToday.Day, now.Hour, now.Minute, now.Second);
var final = adjusted.ToString("dd MMMM yyyy");
不过,可能有更好的方法。
ETA
您应该考虑使用 JavaScript 的 Date.toISOString()
而不是只发送日期。然后在C#中,使用Convert.ToDateTime()
来解析。它使用 UTC,您可以保证获得客户端机器生成日期的准确时间。