Format sposobu wyświetlania daty w bazie danych jest zwykle nieistotny, ponieważ powinien zostać przekazany do .Net jako DateTime
- a nie jako string
. (W przypadku przechowywania go jako varchar
w bazie danych, masz większy problem.)
ASP.Net WebAPI jest zwrócenie wartości w formacie określonym przez ISO8601 i RFC3339. Jest to dobre rozwiązanie, ponieważ jest to uznawany format do odczytu maszynowego. Prawdopodobnie nie chcesz tego zmienić.
Jeśli naprawdę chcesz to zmienić, musisz zaimplementować niestandardową wersję JSON.Net JsonConverter
, pochodzącą z DateTimeConverterBase
. Jest to omówione here i here.
Zamiast tego należy rozważyć, w jaki sposób używasz rzeczywistego wyniku w aplikacji klienckiej. Wspomniałeś o jQuery, więc założę się, że twoim klientem jest JavaScript. W wielu przeglądarek, wartość ISO8601, że masz już uznane przez konstruktora JavaScript Date
, więc może być w stanie po prostu to zrobić:
var dt = new Date("2011-09-07T14:43:22.520");
Ale to won't work in all browsers. I Date
nie ma dużej elastyczności, jeśli chodzi o formatowanie. Zamiast tego warto rozważyć bibliotekę, taką jak moment.js. Mając to na miejscu, można to zrobić:
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"
Należy pamiętać, że ciąg formatu tutaj zgodny moment.js, nie .NET. Istnieją różnice w wielkości liter. Szczegółowe informacje znajdują się w the moment.js documentation.
Jeszcze jedno - ponieważ wartość podałeś nie ma albo Z
na końcu, ani nie ma przesunięcia takich jak -07:00
, to zakładam, że pochodził z DateTime
whos .Kind
wartość jest DateTimeKind.Unspecified
. Należy pamiętać, że kiedy zostanie on przesłany do JavaScript (lub gdziekolwiek indziej), nie ma informacji o tym, jaka strefa czasowa jest reprezentowana. JavaScript przyjmie lokalną strefę czasową przeglądarki .
Jeśli nie jest to zgodne z zamierzeniem, musisz przechowywać wartości UTC w bazie danych i upewnić się, że mają one DateTimeKind.Utc
, więc zostaną oznaczone na końcu serią z Z
na końcu. JavaScript znormalizuje to do strefy czasowej przeglądarki, ale nadal będziesz mówić o tej samej chwili w czasie.
Alternatywnie można użyć typu DateTimeOffset
- który będzie serializować z określonym przesunięciem. JavaScript nadal będzie znormalizować to do strefy czasowej użytkownika.
'" 2011-09-07 14: 43: 22.520 "' jest dobre dla Chrome '" 2011-09-07T14: 43: 22.520 "' zgłasza błąd w FF => 'Data {Invalid Date}' spróbuj 'new Date (datestring)', a zobaczysz – Jaider