【问题标题】:Unrecognizable SQL Datetime value无法识别的 SQL 日期时间值
【发布时间】:2014-12-30 18:45:21
【问题描述】:

我的 Web 应用程序中的一个函数调用自定义 API(用 C# 编写),其中存储了数据库的当前日期和时间,在 API 中,只需使用 DateTime.Now 方法分配一个值.

上面提到的日期和时间值通过以下方式检索:

DateTime? dt = !string.IsNullOrEmpty((dr["RecordDate"]).ToString()) ? 
    Convert.ToDateTime(dr["RecordDate"].ToString()) : (DateTime?) null;

当我将上述代码中的 dt 中的值分配给 JavaScript 变量时,我最终得到了一个值 /Date(1415049596057)/。我以前见过日期和时间值以不同的方式格式化,但我认为我没有见过这样的东西。我想我没有正确处理转换过程,但我真的对此感到困惑。

更新:

对 DateTime 变量的赋值操作如下:

using (var con = new SqlConnection(Service.GetSiteSetting(_httpContextAccessor.Current(), customdb))
{
    con.Open();
    var cm = new SqlCommand { CommandType = CommandType.StoredProcedure, CommandText = "SaveRecord", Connection = con };
    ...  // not showing other parameters
    cm.Parameter.Add(new SqlParameter("@RecordDate", SqlDbType.DateTime) { Value = DateTime.Now });
    ...
    cm.ExecuteNonQuery();
}

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 你能显示分配代码吗?您是否使用特定的框架?有些框架确实以这种方式序列化日期。
  • 您是否尝试将 DateTime 转换为 javascript 中的任何位置的 Int?该值是您从 DateTime 的 Ticks 属性中获得的值
  • @JeffreyWieder - 不,我没有在 javascript 中进行任何转换

标签: javascript c# sql datetime


【解决方案1】:

日期时间值的转换导致您的问题。查看comparing a SQL datetime to a JavaScript date上的相关帖子。

编辑:“1415049596057”的值不会转换为有效日期。 datejs.com 上有一个快速检查功能,您可以使用它来验证字符串值。

【讨论】:

  • Misty - 我认为这个问题与日期时间值的转换有关,我已经阅读了几篇与您链接的类似的 SO 帖子,但日期时间值的格式我have 与所有其他示例完全不同,除非我遗漏了什么。
  • 我现在无法测试它,我需要看看你的 JavaScript 是如何获取 DateTime 值才能确定的,但是你是否在 C# 中多次转换该值?什么是类型,当 JS 得到它时?当您将 DateTime 转换为字符串时,它不会自动采用 JavaScript 识别的格式,因此如果它是字符串,那可能是您的问题。尝试将其键入为 DateTime,或使用 JavaScrit 可识别的格式字符串。
【解决方案2】:

所以,又在各种 SO 帖子中翻找了几个小时,我终于找到了答案 here。至于为什么我会以这种特定格式获得 DateTime,我仍然不确定 100%。但是,我注意到有些人将这种看起来很奇怪的格式称为“JSON 日期”,所以也许就是这样,但掌握得更好的人可以确认。

无论如何,对于那些可能遇到同样问题的人,我所要做的就是在我的 Javascript 中添加一行代码,如下所示:

// 'dateVal' holds the datetime value I retrieved from the database. Also, since the value
// is in '/Date(1415049596057)/' format, I need to extract the numeric part of the value.
var date = new Date(parseInt(dateVal.substr(6)));

我在变量date 中的值现在是Mon Nov 03 2014 16:19:56 GMT-0500 (Eastern Standard Time)。如您所见,它相当冗长,但将该值格式化为您想要的任何格式都应该非常简单。

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 2015-07-31
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2013-03-03
    • 2021-05-20
    • 2018-06-11
    • 1970-01-01
    相关资源
    最近更新 更多