Ich habe eine Client-App, die Daten in Ortszeit an einen Rest Api sendet. Ein Beispiel Datum ist:Wie konvertiert man innerhalb Json von lokal nach UTC?
"2016-09-12T10:05:44.583694+02:00"
The Rest Api muss dann diese Daten in Utc an einen SOAP-Dienst zu übermitteln, zum Beispiel:
"2016-09-12T08:05:44Z"
ich folgenden Konverter bin mit konvertieren Datumswerten aus Ortszeit Utc:
public class UtcDateTimeConverter : IsoDateTimeConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(DateTime);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (value == null)
{
writer.WriteNull();
return;
}
writer.WriteValue(TimeZone.CurrentTimeZone.ToUniversalTime(DateTime.SpecifyKind((DateTime)value, DateTimeKind.Utc)));
}
}
der obige Wandler wird als Attribut für alle DateTime
Eigenschaften der POCO Klassen platziert. Diese Klassen werden sowohl von der Client-App als auch von Rest Api verwendet.
Der Konverter konvertiert jedoch nicht von lokal zu Utc.
Was fehlt mir?
Sie können nicht konvertieren * innerhalb * Json - es ist nur das Container-Format und nicht aktiv * etwas * tun. Sie müssen entweder auf Server- oder auf Frontend-Seite konvertieren. – Robert
Ich habe es nicht benutzt, aber mein Lesen der Dokumente ist, dass 'DateTime.SpecifyKind ((DateTime) -Wert, DateTimeKind.Utc))' bedeutet, dass Sie erklären, dass 'Wert' ist in UTC-Zeit (auch wenn es nicht ' t). Wenn Sie also 'ToUniversalTime' für diesen Wert ausführen, denkt es, dass es bereits in UTC ist und konvertiert es nicht. Das ist meine Vermutung. Wenn ich richtig bin, müssen Sie die Zeitzone angeben, die 'value' tatsächlich _is_ – ADyson