【问题标题】:DateTime format in Entity Framework and SQL Server实体框架和 SQL Server 中的日期时间格式
【发布时间】:2013-05-16 10:56:06
【问题描述】:

我正在使用实体框架从 SQL Server 获取日期时间。我的数据库中的格式是2013-01-01 00:00:00.000,当我通过实体框架以 JSON 格式获取它时,它是"\\/Date(1356980400000+0500)\\/"

这是我的代码

public class SurveyData
{       
        [DataMember]
        public DateTime? CreatedDate { get; set; } 
}

var surveyDataList = (from survey in context.FDT_SURVEY                             
                      where survey.Name == surveyName 
                      select new SurveyData
                          {
                              SurveyID = SqlFunctions.StringConvert((double)survey.SURVEY_ID).Trim(),
                              CreatedDate = survey.CREATED_DATE,
                          }
    );

在我的数据库中,CREATED_DATE 的数据类型是datetime

无法理解问题所在。任何帮助!

【问题讨论】:

  • DATETIME 在 SQL Server 中以任何字符串格式存储 - 它存储为 8 字节数据类型。默认情况下,SQL Server 日期没有任何关联的格式。您在 JSON 中显示的日期是标准 JSON 编码。那么这有什么问题呢??
  • \\/Date(1356980400000+0500)\\/ ,我正在接收这种格式的日期时间。
  • 是的 - 再次 - 有什么问题?那是标准的 JSON——你能不能把它转换成 .NET 对象——或者有什么问题??

标签: sql-server entity-framework datetime


【解决方案1】:

试试这个:

    [DisplayFormat(DataFormatString = "{0,d}")]
    [DataType(DataType.DateTime)]
    public DateTime? CreatedDate { get; set; } 

【讨论】:

  • 使用 System.ComponentModel.DataAnnotations;
【解决方案2】:

Entity Framework 不返回 JSON 格式的任何内容。它用数据填充 .NET 对象,或者用来自 .NET 对象的数据填充数据库。我相信,附加调试器将表明 CreatedDate 具有正确的值。

尽管问题中有 cmets,但实际问题更可能与 JSON 没有“日期”或“日期时间”类型的概念有关。见The "right" JSON date format。一些序列化代码采用 .NET SurveyData 类并使用 .NET 框架的 JSON 序列化程序(可能是 DataContractJsonSerializer)将其序列化为 JSON,并以您所看到的格式将其写出。这可能是 WCF 或旧版本的 ASP.NET MVC 或 Web API。

更高版本的 ASP.NET 使用 NewtonSoft JSON.net 库来执行对象的序列化。默认情况下,它们使用 ISO 8601 格式,这是世界上大多数人在 JSON 对象中对日期或日期时间字段所期望的格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 2015-03-16
    • 2018-04-25
    • 2012-08-14
    相关资源
    最近更新 更多