javascript - 将 DateTimeOffset 持久化到服务器

标签 javascript c# nancy datetimeoffset

我正在尽力弄清楚如何将 datetimeoffset 字符串持久保存到服务器,以便它正确绑定(bind)到 DateTimeOffset 属性。

我试过使用这样的东西:

moment.utc().format() + ' +' +  new Date().getTimezoneOffset() / 60 + ':00';

这显示为 6/12/2017 22:27 +4:00,我将其作为字符串发送到服务器,但似乎每次都无法解析为 DateTimeOffset 对象。

目前,我正在将 Nancy 用于我的 Web API 框架,但我想知道 Web API 也有同样的问题。

目前我只是发回偏移量并像这样设置 DateTimeOffset 属性:

dto.CommentDate = new DateTimeOffset(DateTime.UtcNow).ToOffset(new TimeSpan(dto.Offset, 0, 0));

有更好的方法吗?我可以发送整个日期而不仅仅是偏移量吗?

最佳答案

一些事情:

  • +04:00 是俄罗斯部分地区和中东一些地方使用的偏移量。从您博客上提到的位置来看,我认为您的意思是 -04:00,它用于美国东部夏令时(以及其他时间)。 (JavaScript getTimezoneOffset 方法与此相反。)

  • + ':00' 假定所有时区偏移量都以整小时为单位。实际上,很多是 :30,少数是 :45

  • DateTimeOffset 中,DateTime 部分始终是本地时间,而不是 UTC 时间。换句话说,偏移量已经应用。

    例如,如果本地时间是美国东部时区的 2017-06-16 12:00:00,那么我们将其表示为 2017-06-16T12 :00:00-04:00(采用 ISO 8601 格式)。相应的 UTC 时间将表示为 2017-06-16T16:00:00Z

  • ISO 8601 格式不允许发送 UTC 时间加上本地偏移量。我所知道的唯一使用该约定的格式是较旧的 "ASP.NET JSON Date Format" ,它来自 .NET 中的 JavaScriptSerializer 类。与上一个示例对应的值为 /Date(1497628800000-0400)/。如您所见,时间戳部分是 Unix 时间的毫秒分辨率版本,它是基于 UTC 的。偏移量尚未应用,因此是无关紧要的。这种格式现在被认为已弃用,所以请不要这样做。

  • 您似乎在客户端使用 moment.js。这可以轻松生成您需要发送的字符串。

    // get the current time, as an ISO 8601 string, with whole-second resolution
    moment().format()  // "2017-06-16T12:00:00-04:00"
    
    // or, with millisecond resolution
    moment().format('YYYY-MM-DD[T]HH:mm:ss.SSSZ')  // "2017-06-16T12:00:00.000-04:00"
    
  • 在服务器端,只需将您的属性公开为 DateTimeOffset。不要尝试自己构建它。

关于javascript - 将 DateTimeOffset 持久化到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44511468/

相关文章:

asp.net - javascript 函数与 asp.net 一起

javascript - 如何跨浏览器调试网页渲染兼容性问题?

javascript - 隐藏 HTML 页面中的静态(或硬编码)文本

c# - 将局部变量和值声明为 Debug模式

c# - 通过 C# 与 IIS 交互

javascript - 设置对象键 JavaScript 值时的括号位置

c# - 在单元测试中使用 httpcontext

dynamic-language-runtime - 南希FX : How do I check if query-string/form values have been correctly passed to my handler?

http - 仅允许 Nancy 在接受 header 为 html 时返回 json 或 Xml 和 406

iis-7 - 在 IIS 上使用 Nancy 托管虚拟目录