【问题标题】:How do I extract the date and time from a rest/WCF/enity/sqlserver datetime "/Date(xxxxxxxxxxxxxxx-xxxx)/" string?如何从 rest/WCF/enity/sqlserver datetime "/Date(xxxxxxxxxxxxxxx-xxxx)/" 字符串中提取日期和时间?
【发布时间】:2016-02-17 15:53:55
【问题描述】:

我使用 ResponseFormat = WebMessageFormat.Json 通过 WCF 返回 JSON 从使用实体框架访问的 SQL 后端。

我的查询正在返回

    {
  "DateInserted": "/Date(1435640400000-0500)/",
  "DateUpdated": "/Date(1454699734160-0600)/",

我的数据库中的 DateInserted 是 2015-06-30 00:00:00.000 我的数据库中的 DateUpdated 是 2016-02-05 13:15:34.160

但我无法找到有关 Date() 字符串表示的数字的任何信息,也无法找到将日期时间转换为该字符串表示的位置的任何信息,因此您可以分享的任何信息都可能有助于我。

【问题讨论】:

  • 它看起来像一个 Unix 时间戳。在这种情况下,格林威治标准时间 2 月 5 日星期五晚上 7:15。我假设0500是一个时差。这是自 1970 年 1 月 1 日午夜以来的秒数。转换很容易,将秒数添加到 01/01/1970。
  • 有关此格式的说明,请参阅ASP.NET AJAX: Inside JSON date and time string。如果您想要不同的格式,请参阅stackoverflow.com/questions/9266435/…
  • 谢谢!根据 Equalsk 的评论,我能够弄清楚。结果是,它是自 1970 年 1 月 1 日午夜以来的总毫秒数,然后减去第二个小时数。

标签: c# sql-server json wcf datetime


【解决方案1】:

DateTime 值以“/Date(700000+0500)/”的形式显示为 WCF JSON 字符串,其中第一个数字(在提供的示例中为 700000)是 GMT 时区的毫秒数,常规(非-夏令时)自 1970 年 1 月 1 日午夜以来的时间。该数字可能为负数以表示较早的时间。示例中由“+0500”组成的部分是可选的,表示时间是本地类型的——也就是说,应该在反序列化时转换为本地时区。如果不存在,则将时间反序列化为 Utc。实际数字(本例中为“0500”)及其符号(+ 或 -)将被忽略。

以下 Javascript 函数仅使用日期字符串的第一部分创建一个新的 Javascript 日期,例如,自 1970 年 1 月 1 日午夜以来的毫秒数。Javascript Date 构造函数将创建一个具有正确语言环境时间的日期。

String.prototype.toDateFromWcfJsonString = function()
{
   return eval(this.replace(/\/Date\(([-|+]*\d+)([\+|-]\d+)*\)\//, "new Date($1)"));
};

另见http://msdn.microsoft.com/en-us/library/bb412170(v=vs.90).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 2011-03-31
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 2016-07-24
    • 2014-03-14
    相关资源
    最近更新 更多