У меня есть клиентское приложение, которое отправляет даты по местному времени в Rest Api. Пример дата:Как сделать перевод с локального на UTC пользователя Json?
"2016-09-12T10:05:44.583694+02:00"
Остальное Api тогда необходимо направить эти даты МОВ к службе SOAP, например:
"2016-09-12T08:05:44Z"
Я использую следующий конвертер для преобразования значений даты из по местному времени по Гринвичу:
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)));
}
}
выше преобразователь размещен в качестве атрибута на всех DateTime
свойств классов POCO. Эти классы используются как клиентским приложением, так и Rest Api.
Однако конвертер не преобразуется из локальной в Utc.
Что мне не хватает?
Вы не можете преобразовать * в * Json - это только формат контейнера и не делает * активно * что-то. Вам нужно конвертировать либо на сервер, либо на внешнюю сторону. – Robert
Я не использовал его, но мое чтение документов заключается в том, что 'DateTime.SpecifyKind ((DateTime) value, DateTimeKind.Utc))' означает, что вы объявляете, что 'value' находится в UTC (даже если это isn ' т). Поэтому, когда вы запускаете 'ToUniversalTime' на это значение, он думает, что он уже в UTC и не конвертирует его. Это мое предположение. Если я прав, вам нужно указать часовой пояс, что 'значение' фактически _is_ – ADyson