MVC 中的日期和时区管理

Ama*_*ian 1 c# asp.net-mvc datetime date

我对在 c# 中使用文化不变性的正确方法感到困惑,在托管应用程序时,我包含的日期和时间似乎有些错误, <globalization uiCulture="en-IN" culture="en-IN" /> 并且一切正常。但是在迁移到云 Elastic Beanstalk 时,应用程序再次失败所以我<globalization uiCulture="en-IN" culture="en-IN" /> 再次包含但在其他时区失败除了印度使用 datepicker 选择的日期使用 ajax 代码传递给控制器​​,将它传递给应用程序如何工作的数据库操作的存储过程!但是在数据库中输入的日期似乎是错误的 (01-01-0001)。处理日期时间的正确方法是什么?哪个适用于所有时区?我尝试采用当前的文化,但该方法不起作用,因为我的查询与代码错误无关,我没有添加任何代码

    public JsonResult CreateAcademicInfo(CreateCommand create)
    {
            return Json(_academicInfo.CreateClass(create),JsonRequestBehavior.AllowGet); 


} .// controller



private bool CreateAcademicInfo(CreateCommand createAcademicInfo, IDbUtility dbObj)
        {

                ISumDbCommand cmdcreateAcademicInfo =
                    dbObj.CreateCommand("uspAddInformations", CommandType.StoredProcedure);
                cmdcreateAcademicInfo.AddParameter("HierarchyStructureName", SumDbType.String,
                    createAcademicInfo.HierarchyStructureName);
                 cmdcreateAcademicInfo.AddParameter("MaximumCount",SumDbType.Integer,createAcademicInfo.MaximumCount);
                cmdcreateAcademicInfo.AddParameter("StartDate",SumDbType.DateTime,createAcademicInfo.StartDate);
                cmdcreateAcademicInfo.AddParameter("EndDate",SumDbType.DateTime, createAcademicInfo.EndDate);
                int errorCode = dbObj.StoredProcExecute(cmdcreateAcademicInfo.DbCommand);
                if (errorCode != 0)
                {
                    throw new Exception.DbOperationException($"Error {errorCode} occurred = {dbObj.LastError}");
                }
                return true;


        } //API 
Run Code Online (Sandbox Code Playgroud)

Rac*_*lan 5

没有足够的信息来为您提供特定于您的代码的答案,但以下是大纲:

  • 将所有日期转换为 UTC,然后再将它们保存到数据库中。
  • 当您从数据库中获取它们以进行显示时,将所有日期转换回当地时间。

现在请记住,本地时间是指用户所在区域的时间,因此只有在客户端运行的代码才能知道用户的本地时间。在服务器上的.NET代码运行,并不会知道用户的本地时间。有一些方法可以在服务器上获取用户的时区,但它并不总是可靠的,因此最好在客户端使用 JavaScript。这意味着:

  • 数据库中的所有日期都必须是 UTC。
  • .Net 代码中的所有日期都必须是 UTC。
  • .Net 中不进行日期转换。
  • 所有显示日期均为当地时间。
  • 所有日期转换都必须在 JavaScript 中完成。
  • 客户端和服务器端之间的所有数据传输必须采用相同的格式,并建议采用通用标准格式。

现在,了解所有这些,以下是实用要点(我的食谱):

  • 当您需要在服务器上生成当前日期以保存在数据库中时,使用DateTime.UtcNow. 对于不是来自客户端的日期,这是必需的。例如,如果要记录操作时间。我更喜欢在应用程序中执行此操作,但如果您更喜欢直接在数据库中执行此操作,请使用以 UTC 生成当前时间的数据库函数。

  • 我建议使用可排序的日期和时间格式,因为 JavaScript 和 .Net 都理解它。但是,有一点不同。JavaScriptZ在最后添加,但这很容易补救。例如,.Net 中的 2009-06-15T13:45:30 在 JavaScript 中将是 2009-06-15T13:45:30Z。

  • 如果要将 UTC 日期从 .Net 发送到 JavaScript,请使用:

var date = new Date("@mydate.ToString("s")Z");

JavaScript 会自动将其转换为本地时间。很漂亮,不是吗?

  • 当您想将本地日期从 JavaScript 发送到 .Net 时,请使用.toJSON()方法。它将使用可排序的日期和时间格式对其进行格式化,并自动将其转换为 UTC。美的东西。然后,在 .Net 中,您可以使用其中一个DateTime函数来解析字符串(例如DateTime.Parse())。