Asp-net web api Ausgabe datetime mit dem Buchstaben T

7

die Daten in der DB sehen so aus

%Vor%

Aber meine Web-API gibt die Daten aus und ersetzt den Raum durch den Buchstaben T

%Vor%

Ich kann den Buchstaben T in jquery wieder durch ein Leerzeichen ersetzen, aber kann ich dieses Problem von der Web-API beheben (lassen Sie die Web-API die Originaldaten ausgeben?)

Ich will auch nicht die Millisekunden am Ende. Wie kann ich sie loswerden?

    
kaboom 08.08.2013, 23:32
quelle

1 Antwort

31

Das Format, in dem Sie das Datum in der Datenbank sehen, ist normalerweise irrelevant, da es in .Net als DateTime - nicht als string übergeben werden sollte. (Wenn Sie es als varchar in der Datenbank speichern, haben Sie ein größeres Problem.)

ASP.Net WebAPI gibt den Wert im Format ISO8601 und RFC3339 . Dies ist eine gute Sache, da es ein anerkanntes maschinenlesbares Format ist. Sie wollen es wahrscheinlich nicht ändern.

Wenn Sie es wirklich ändern möchten, müssen Sie ein benutzerdefiniertes JSON.Net JsonConverter implementieren, das von DateTimeConverterBase abgeleitet wird. Dies wird hier und hier besprochen .

Aber stattdessen sollten Sie überlegen, wie Sie das tatsächliche Ergebnis in Ihrer Client-Anwendung verwenden. Sie haben jQuery erwähnt, daher nehme ich an, dass Ihr Kunde JavaScript ist. In vielen Browsern wird der ISO8601-Wert, den Sie haben, bereits vom JavaScript-Konstruktor Date erkannt, sodass Sie dies möglicherweise einfach tun können:

%Vor%

Aber das hat gewonnen Funktioniert nicht in all Browsern . Und Date hat nicht viel Flexibilität beim Formatieren. Stattdessen sollten Sie eine Bibliothek wie moment.js in Betracht ziehen. Damit können Sie dies tun:

%Vor%

Bitte beachten Sie, dass die Formatzeichenfolge hier mit moment.js übereinstimmt, nicht mit .NET. Es gibt Unterschiede in der Groß- / Kleinschreibung. Einzelheiten finden Sie in der Dokumentation zu momentage.js .

Eine andere Sache - da der Wert, den Sie angegeben haben, weder ein Z am Ende noch einen Offset wie -07:00 hat, dann nehme ich an, dass er von einem DateTime whos% co_de kam % Wert ist .Kind . Sie sollten sich darüber im Klaren sein, dass es keine Informationen darüber gibt, welche Zeitzone dargestellt wird, wenn diese in JavaScript (oder anderswo) gesendet wird. JavaScript übernimmt die lokale Zeitzone des Browsers .

Wenn das nicht beabsichtigt war, müssen Sie UTC-Werte in Ihrer Datenbank speichern und sicherstellen, dass sie DateTimeKind.Unspecified haben, damit sie am Ende mit einem DateTimeKind.Utc serialisiert werden. JavaScript wird dies auf die Zeitzone des Browsers normalisieren, aber Sie werden immer noch über denselben Zeitpunkt sprechen.

Alternativ können Sie auch einen Z -Typ verwenden, der mit dem spezifischen Offset serialisiert wird. JavaScript wird dies weiterhin auf die Zeitzone des Benutzers normalisieren.

    
Matt Johnson 09.08.2013, 00:22
quelle