数据库中的数据看起来像这个
2011-09-07 14:43:22.520
但是我的Web API输出数据,并将空格替换为字母T
2011-09-07T14:43:22.520
我可以在jquery中再次用空格替换字母T,但我可以从Web API修复这个问题吗(使Web API输出原始数据?)
我也不想要最后的毫秒。我该如何摆脱它们?
在数据库中查看日期的格式通常无关紧要,因为它应该作为DateTime
而不是string
传递到.Net。(如果您将其作为varchar
存储在数据库中,则会遇到更大的问题。)
ASP.Net WebAPI正在以ISO8601和RFC3339定义的格式返回值。这是一件好事,因为它是一种公认的机器可读格式。你可能不想改变它。
如果您真的想更改它,您需要实现一个从DateTimeConverterBase
派生的自定义JSON.Net JsonConverter
。这在这里和这里讨论。
但是,您应该考虑如何在客户端应用程序中使用实际结果。您提到了jQuery,所以我假设您的消费者是JavaScript。在许多浏览器中,您所拥有的ISO8601值已经被JavaScript Date
构造函数识别,因此您可能只需要执行以下操作:
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
,也没有像-07:00
这样的偏移量,所以我假设它来自DateTime
,其.Kind
值为DateTimeKind.Unspecified
。您应该意识到,当它被发送到JavaScript(或其他任何地方)时,没有关于表示哪个时区的信息。JavaScript将采用浏览器的本地时区。
如果这不是您想要的,那么您需要将UTC值存储在数据库中,并确保它们具有DateTimeKind.Utc
,以便在最后使用Z
进行序列化。JavaScript会将其标准化为浏览器的时区,但您仍然会谈论同一时刻。
或者,您可以使用DateTimeOffset
类型,它将使用特定的偏移量进行序列化。JavaScript仍然会将其规范化为用户的时区。