数据库中的数据如下所示
2011-09-07 14:43:22.520
但我的 Web API 输出数据并用字母 T 替换空格
2011-09-07T14:43:22.520
我可以在 jquery 中再次用空格替换字母 T,但是我可以从 Web API 解决这个问题(让 Web api 输出原始数据吗?)
我也不想要最后的毫秒数。我怎样才能摆脱它们?
数据库中的数据如下所示
2011-09-07 14:43:22.520
但我的 Web API 输出数据并用字母 T 替换空格
2011-09-07T14:43:22.520
我可以在 jquery 中再次用空格替换字母 T,但是我可以从 Web API 解决这个问题(让 Web api 输出原始数据吗?)
我也不想要最后的毫秒数。我怎样才能摆脱它们?
您如何查看数据库中日期的格式通常是无关紧要的,因为它应该作为DateTime
- 而不是作为.Net 传递到 .Net 中string
。(如果您将其作为 a 存储varchar
在数据库中,您将遇到更大的问题。)
ASP.Net WebAPI 以ISO8601和RFC3339定义的格式返回值。这是一件好事,因为它是一种公认的机器可读格式。你可能不想改变它。
如果你真的想改变它,你需要实现一个自定义 JSON.Net JsonConverter
,从DateTimeConverterBase
. 这在此处和此处进行了讨论。
但是,您应该考虑如何在客户端应用程序中使用实际结果。您提到了 jQuery,所以我假设您的使用者是 JavaScript。在许多浏览器中,您拥有的 ISO8601 值已经被 JavaScriptDate
构造函数识别,因此您可以这样做:
var dt = new Date("2011-09-07T14:43:22.520");
但这不适用于所有浏览器。并且Date
在格式化方面没有很大的灵活性。因此,您可能需要考虑使用诸如moment.js 之类的库。有了它,你可以这样做:
var m = moment("2011-09-07T14:43:22.520");
var s = m.format("YYYY-MM-DD HH:mm:ss"); // output: "2011-09-07 14:43:22"
请注意,这里的格式字符串符合 moment.js,而不是 .NET。区分大小写存在差异。有关详细信息,请参阅moment.js 文档。
另一件事-由于您提供的值Z
末尾没有 a ,也没有诸如 之类的偏移量-07:00
,因此我假设它来自DateTime
whos.Kind
值DateTimeKind.Unspecified
。您应该知道,当它被发送到 JavaScript(或其他任何地方)时,没有关于表示哪个时区的信息。JavaScript 将假定浏览器的本地时区。
如果这不是您想要的,那么您需要将 UTC 值存储在您的数据库中,并确保它们有DateTimeKind.Utc
,以便它们Z
在最后用 a 进行序列化。JavaScript 会将其标准化为浏览器的时区,但您仍然会谈论同一时间。
或者,您可以使用一种DateTimeOffset
类型 - 它将使用特定的偏移量进行序列化。JavaScript 仍会将其标准化为用户的时区。