c# - 问题解析日期显示不正确的日期
问题描述
我有一个生成今天日期的 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
}
这个函数返回13/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 Server 表中:
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");
不过,可能有更好的方法来做到这一点。
预计到达时间
您应该考虑使用 JavaScriptDate.toISOString()
而不是仅仅发送日期。然后在 C# 中,使用Convert.ToDateTime()
它来解析它。这使用 UTC,并且您可以保证获得客户端计算机生成日期的确切时间。
推荐阅读
- c# - 如何在 c# blazor 中每 30 秒运行一次计划任务
- apache-spark - PySpark - 使用 Kakfa Json 消息创建 pyspark 数据帧
- mongodb - MongoDB:仅使用一个唯一属性创建索引
- html - 如何更改 wordpress 主题 css
- python - 如何使用多处理在python中创建线程?
- node.js - 如果密码错误则登录时,希望使用 passport-local-mongoose 呈现 login.ejs 而不是显示“未经授权”的页面
- bash - 查找和替换所有文件的关键字 (Mac OS)
- reactjs - 如何在本机反应中使用 i18next 显示文本和超链接
- sql - 如何在 html 表中显示对象属性的数据?
- java - Xpath 包含 text() 不适用于注释