Asp-net-web-api输出带有字母T的日期时间



数据库中的数据看起来像这个

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仍然会将其规范化为用户的时区。

相关内容

  • 没有找到相关文章

最新更新