Azure 应用服务 - 同步期间日期时间更改

2023-12-26

我正在开发一个使用 Xamarin.Forms 和 Azure 应用服务(包括离线同步)的应用程序。

在客户端有这样一段代码:

appointment.StartDate = System.DateTime.Now;

假设约会。开始日期是现在2017-07-05 12:00:00.

用户与服务器同步数据后,会发生以下情况:

Sqlite 数据库中的日期(在客户端):2017-07-05 12:00:00

服务器数据库中的日期:2017-07-05 10:00:00

因此,我假设 Azure 将我的日期更改为 UTC。这在技术上可能是正确的,因为您应该始终将 UTC 存储在数据库中并在客户端中处理时区转换。但不幸的是,服务器数据库很旧并且存储区域设置日期。

如何使 Azure 将客户端的本地日期而不是 UTC 存储在服务器数据库中?

我尝试将 Azure 中的 WEBSITE_TIME_ZONE 属性更改为我的本地时区,但这不起作用:http://www.louischarlesgagnon.com/post/azure-app-service-set-timezone-for-your-web-application http://www.louischarlesgagnon.com/post/azure-app-service-set-timezone-for-your-web-application

2017 年 7 月 6 日更新:

经过进一步的研究,我发现这是一个已知的“问题”。

看这里:

https://github.com/Azure/azure-mobile-apps-net-client/issues/131 https://github.com/Azure/azure-mobile-apps-net-client/issues/131

Azure 移动应用程序在 Sqlite 数据库中保存错误的日期时间 https://stackoverflow.com/questions/39890764/azure-mobile-apps-saves-incorrect-datetime-in-sqlite-database

https://forums.asp.net/t/1808269.aspx?DateTime+issues+with+Azure+c+javascript+sql+so+confused+ https://forums.asp.net/t/1808269.aspx?DateTime+issues+with+Azure+c+javascript+sql+so+confused+

读完本文后,我能够构建一个解决部分问题的解决方案。在客户端,我现在正在做类似的事情。

 public System.DateTime? Start
    {
        get
        {
            System.DateTime? dateTime = GetValue<System.DateTime?>(_start);
            if (dateTime.HasValue)
                dateTime = System.DateTime.SpecifyKind(dateTime.Value, System.DateTimeKind.Utc);

            return dateTime;
        }
        set
        {
            System.DateTime? dateTime = value;
            if (dateTime.HasValue)
                dateTime = System.DateTime.SpecifyKind(dateTime.Value, System.DateTimeKind.Utc);

            SetValue<System.DateTime?>(_start, dateTime);
        }
    }

这告诉 Azure 该日期已经是 UTC 格式,并且 Azure 无需进行转换。这适用于在客户端创建的 System.DateTime 现在无需转换即可成功存储在服务器数据库中的情况。

但现在还有另一个问题:

当 Azure 将服务器数据库中存储的日期返回给客户端时,Azure 会将“UTC 日期”转换为本地日期。以下是当前情况的示例:

客户日期: 06.07.2017 14:30

-> 客户端将日期推送到服务器

服务器日期:2017年7月6日 14:30

-> 客户端从服务器获取日期

客户日期:2017年7月6日 16:30


但不幸的是,服务器数据库很旧并且存储区域设置日期。如何使 Azure 将客户端的本地日期而不是 UTC 存储在服务器数据库中?

根据您的描述,我建议您可以存储长类型值 DateTime.UtcNow.Ticks 因为您的日期时间不使用日期时间类型。

该值在您的服务器数据库中不会更改,并且可以转换回 UTC 时间。

当您想使用时间时,您可以将 Ticks 转换回日期时间。

更详细的,你可以参考这些代码:

    //get utc time ticks
    long i = DateTime.UtcNow.Ticks;
    //convert back to local time
    DateTime myDate = new DateTime(i).ToLocalTime();

我是对的,我必须调整我的旧应用程序,以便它们可以处理 UTC?

在我看来,我建议您可以将 UTC 时间存储到数据库中。然后您可以将 UTC 时间转换为本地时间。这是设计应用程序的正确方法。如果有不同时区的客户,如何将数据库的本地时间转换为客户时区的本地时间?

UTC 是世界各地普遍使用的时间标准。世界计时中心已同意保持其时间尺度密切同步或协调,因此被称为“协调世界时”。

所以我建议你可以使用到当地时间 https://msdn.microsoft.com/zh-cn/library/system.datetime.tolocaltime(v=vs.110).aspx在您的应用程序中将 UTC 时间转换为本地时间的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure 应用服务 - 同步期间日期时间更改 的相关文章

随机推荐

  • 选择使用 IIS 的 WCF 服务托管或使用 Windows 服务的自托管

    因为我们想要使用 Asp Net MVC 3 开发一个新产品 这里的关键点是我们通过 WCF Web 服务与数据库对话的所有内容 我们正处于需要决定是在 IIS 中托管 WCF Web 服务还是使用 Windows 服务自托管的阶段 我提出
  • 带有滚动条的文本区域的圆角

    在我的网站上我有一个 htmltextarea框中有大量文本 因此它有一个滚动条 好吧 我想在我的文本区域上有圆角 但是滚动条看起来很糟糕 这是我的 HTML 片段
  • 变量名长度对 C# 性能重要吗?

    我一直想知道在 WinForms C 中使用长描述性变量名称是否对性能有影响 我问这个问题是因为在 AutoIt v3 解释语言 中提出了具有短名称的变量 例如aa代替veryLongVariableName速度要快得多 当程序大于 5 行
  • 弹簧接线,单例与原型

    刚刚阅读了 spring 的内容 当在 spring 中使用 DI 时 如果将 bean 设置为单例 默认 则将 分配 该类的单个实例 而原型每次都会强制创建一个新实例 每次容器分配相同的实例会产生什么后果 这是否意味着会有共享状态 也就是
  • 无法使用 Excel Interop 安排程序

    我用 C NET 开发了一个控制台程序 它使用 Excel Interop 如果我从命令行运行该程序 则该程序在我的开发计算机和 Windows Server 2008 中运行得很好 当我尝试安排任务每天运行时 我收到了这个恼人的互操作错误
  • ARM/neon memcpy 针对*未缓存*内存进行了优化?

    我使用的是基于 Xilinx Zynq 7000 ARM 的 SoC 我正在努力处理 DMA 缓冲区 需要帮助映射 Xilinx ARM SoC Zynq 7000 上的预留 可缓存 DMA 缓冲区 https stackoverflow
  • 通过 using 块使用 Process [重复]

    这个问题在这里已经有答案了 可能的重复 如果我不关闭 C 控制台应用程序中的 System Diagnostics Process 会发生什么情况 https stackoverflow com questions 185314 what
  • 即使 contentSize 大于框架并且在设置内容大小之前添加子视图,scrollView 也不起作用

    void viewDidLoad super viewDidLoad self navigationController navigationBar translucent YES self navigationController nav
  • C++ 计算器跳过 Else 语句

    我正在用 C 制作一个简单的计算器 然而 该程序并没有完全按照应有的方式运行 运行时 trig if 语句执行良好 但是基本算术 else 语句不起作用 我确定代码没有执行 else 语句 并且想知道如何修复它 else 语句中的代码工作正
  • Symfony2:成功登录事件后,执行一组操作

    我需要在用户成功登录后执行一组操作 这包括从数据库加载数据并将其存储在会话中 实现这一点的最佳方法是什么 您可以添加一个监听器security interactive login event 像这样附加你的听众 在此示例中 我还将安全上下文
  • 如何查看上次收到的推送中修改/添加/删除的所有文件?

    命令git show pretty format name status bd61ad98将显示上次提交中修改 添加 删除的所有文件的列表 其中bd61ad98是提交 ID 输出如下所示 trusktr rocketship express
  • 使用 RandomAccessFile 创建文件时出现 java.io.FileNotFoundException

    当我尝试使用 RandomAccessFile 创建文件时遇到 FileNotFoundException RandomAccessFile file new RandomAccessFile test jpg rw 我现在不知道如何解决这
  • qt Creator 调试速度慢

    我正在 Windows 7 64 位上运行基于 Qt 4 7 4 的 Qt Creator 2 3 0 当我从 Qt Creator ctrl r 运行该应用程序时 一切都运行良好 然而 当我调试 F5 时 执行每一行都需要很长时间 有时执
  • 修改ISAPI和CGI扩展

    我的 IIS 服务器有问题 如何使用 C 语言修改 ISAPI 元素 例如 ASP net V4 0 限制为 不允许 我想设置为 允许 如下图所示 我可以使用此代码添加元素 但我无法修改 using System using System
  • JSON - 斜杠不转义

    这是我的 PHP Json 脚本
  • 如何禁用警告数据表警告从行的数据源请求未知参数

    我的数据表中有两行 如下所示 tr td td td td td td tr tr td td tr 这些行对于数据表上的每条记录都会重复 正如您可以想象的那样 我总是收到此错误 并且只需要禁用它 除非您想弄清楚如何使其工作 那么如何禁用警
  • R 包文档:链接到整个包,而不是函数

    我想在我正在开发的一些函数的文档中引用另一个包 整个包 而不仅仅是其中的一个函数 我正在使用 Roxygen2 注释来记录我的包功能 我找不到使用 Roxygen2 创建整个第三方包的链接的方法 要链接到一个包函数 可以这样写 pkg fu
  • TDD:在重构代码的同时破坏所有现有的测试用例

    我已经开始在我的项目中遵循 TDD 但自从我开始 即使读了一些文章 我也很困惑 因为发展速度变慢了 每当我重构代码时 我都需要更改之前编写的现有测试用例 否则它们将开始失败 下面是我最近重构的一个类的例子 public class Sala
  • 如何使用 Javascript 进行替换和追加

    我有一个评论系统 我想在其中实现内联编辑 当有人知道一个好的插件或类似的东西时 请毫不犹豫地给我一个名字 并找到一个 Javascript 片段 它将文本替换为文本区域和文本作为该文本区域的值 但现在我需要向该文本区域添加一个按钮 提交按钮
  • Azure 应用服务 - 同步期间日期时间更改

    我正在开发一个使用 Xamarin Forms 和 Azure 应用服务 包括离线同步 的应用程序 在客户端有这样一段代码 appointment StartDate System DateTime Now 假设约会 开始日期是现在2017