Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改现有ASP.NET web应用程序以支持多个时区_Asp.net_Sql_Datetime_Utc - Fatal编程技术网

更改现有ASP.NET web应用程序以支持多个时区

更改现有ASP.NET web应用程序以支持多个时区,asp.net,sql,datetime,utc,Asp.net,Sql,Datetime,Utc,我有一个70多个项目的现有web应用程序;DB:700多个表,500多个存储过程。 目前有许多表具有Datetime/Date字段 在数据库中保存日期/日期时间信息时,我需要将其更改为UTC以支持多个时区(因为应用程序将跨多个区域访问-服务器也可以托管在多个区域上;目前仅从一个区域访问) 为此,我提出了以下步骤: 获取带有日期/日期时间字段的表列表 检查其日期时间字段的填充方式(即通过应用程序或过程) 列表项 将日期时间转换为UTC,然后保存到DB 在用户浏览器中显示时,将时间转换回用户的时区

我有一个70多个项目的现有web应用程序;DB:700多个表,500多个存储过程。 目前有许多表具有Datetime/Date字段

在数据库中保存日期/日期时间信息时,我需要将其更改为UTC以支持多个时区(因为应用程序将跨多个区域访问-服务器也可以托管在多个区域上;目前仅从一个区域访问)

为此,我提出了以下步骤:

  • 获取带有日期/日期时间字段的表列表
  • 检查其日期时间字段的填充方式(即通过应用程序或过程)
  • 列表项
  • 将日期时间转换为UTC,然后保存到DB
  • 在用户浏览器中显示时,将时间转换回用户的时区
  • 可以编写查询以使用UTC更新现有值
  • 问题是应用程序本身非常庞大,并且有太多的地方(应用程序和过程)更新了datetime;虽然我可以通过查询直接获得表/过程名称列表,但更新每个过程(后端)/文件(前端)是一个非常繁琐的过程

    我想知道在这种情况下最好的方法/建议(将应用程序更改为支持多个时区,且更改最少)


    谢谢

    理想的情况是,在存储过程、过程代码、API接口等中,所有日期都是UTC

    唯一不应使用UTC的时间是在为人类用户呈现之前

    当您指定一个web应用程序时,这应该仅对HTML呈现区域是可隔离的,并且这应该是您在将DB切换到UTC后需要更改的唯一代码

    您只需要更改两个函数:

  • 将人工输入解码为有效日期,并从该会话时区转换为UTC(在任何其他处理逻辑之前执行此操作)
  • 将日期值从UTC转换为当前会话时区,并格式化为人类可读的格式(在显示日期之前执行此操作)

  • 这两个函数应该已经存在于您的UI代码中,用于日期格式化和验证,它们只需要Tweek

    这对您来说太晚了,但是当设计一个在任何记录更改上添加日期戳的应用程序时,正确的做法是编写适当设置日期的SQL触发器。

    他已经很清楚应该如何设置。他的问题是问他如何在他庞大而复杂的应用程序中实现这一点,而不必全部手动完成。不,你是在告诉他应该如何设计。您没有提到这样一个事实,即他有数百个存储过程对当前(特定于语言环境的)时间项(即GETDATE())进行硬编码,也没有提到他有大量可能执行
    DateTime.Now
    的代码。仅仅改变这些东西对他当前所有的代码都没有任何帮助。谁在乎使用哪个代词呢?他说,“问题是应用程序本身非常庞大,有太多的地方(应用程序和过程)更新了datetime”,这表明他的存储过程专门设置了时间(即GETDATE()),他有很多专门设置时间的代码(最有可能是DatetTime.Now)。仅仅因为他没有明确指出它们并不意味着你应该假设它们不存在。至于“易于实现”,这不是……“他们”的整个问题基于这样一个事实:“他们”不想手动更新所有“他们的”在数百个日期目前被硬编码的地方进行编码。你没有提供如何解决这个问题的建议,而这正是“他们”问题的主要目的,你完全忽略了它。相反,你建议这个问题不存在,他们应该更仔细地看一看“他们的”两个地方的代码需要更改。坦率地说,告诉他们他们的问题不存在比将他们称为“他”更具侮辱性……这将自动向您显示您的应用程序出现故障并需要更改的地方(如果经过彻底测试或您的代码中存在某种类型的类型安全性)例如,您可以使用一个数字来存储自Unix时代以来的时间(以毫秒为单位)。这可以很好地用您使用的任何客户端设备/编程语言来解释。因此,我将编写一个层,在处理时间内容时强制其他方法调用该层,以便您能够更好地控制未来的数据库更改乌尔。