将DateTimeOffset保留到服务器

The*_*ica 0 javascript c# datetimeoffset nancy

我正在尽力找出如何将datetimeoffset字符串持久保存到服务器,以使其正确绑定到DateTimeOffset属性。

我试过使用这样的东西:

moment.utc().format() + ' +' +  new Date().getTimezoneOffset() / 60 + ':00';
Run Code Online (Sandbox Code Playgroud)

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

目前,我正在为我的Web api框架使用Nancy,但我也想知道Web API也是如此。

目前,我只是发送回偏移量并设置DateTimeOffset属性,如下所示:

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

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

Mat*_*int 5

一些东西:

  • +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日期格式”,它来自JavaScriptSerializer.NET中的类。上一个示例的对应值为/Date(1497628800000-0400)/。如您所见,时间戳部分是Unix Time的毫秒级版本,它是基于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"
    
    Run Code Online (Sandbox Code Playgroud)
  • 在服务器端,只需将您的媒体资源公开为即可DateTimeOffset。不要尝试自己构建它。