Почему хранилище таблиц Azure не поддерживает DateTimeOffset?

Прежде чем кто-либо закроет это как дубликат, я знаю, что хранилище таблиц Azure не поддерживает DateTimeOffset введите нативно ( MSDN заявляет столько же; пытается читать и писать объекты, имеющие DateTimeOffset свойства не выдают исключение, но также не поддерживают правильные метки времени).

У меня вопрос, почему этот тип данных не поддерживается, особенно если он уже существовал при создании Azure. Еще более запутанным является то, что.NET API для хранения таблиц Azure, кажется, предлагает поддержку для типа данных: сущности преобразуются в словарь EntityProperty ценности, а EntityProperty класс имеет как DateTimeOffsetValue свойство и конструктор, который принимает значение этого типа. Кажется странным, что они добавили бы эту поддержку в API, если сторона Azure все равно не поддерживает тип.

1 ответ

На самом деле поддерживается то, что произошло, когда серверная сторона преобразует локальный DateTimeOffset в стандартный UTC.

Например, отправленный объект имеет -

sendEnt.DateTimeOffset
{2/25/2015 6:55:46 PM -08:00}
    Date: {2/25/2015 12:00:00 AM}
    DateTime: {2/25/2015 6:55:46 PM}
    Day: 25
    DayOfWeek: Wednesday
    DayOfYear: 56
    Hour: 18
    LocalDateTime: {2/25/2015 6:55:46 PM}
    Millisecond: 229
    Minute: 55
    Month: 2
    Offset: {-08:00:00}
    Second: 46
    Ticks: 635604873462293981
    TimeOfDay: {18:55:46.2293981}
    UtcDateTime: {2/26/2015 2:55:46 AM}
    UtcTicks: 635605161462293981

Тогда возвращаемая сущность имеет -

retrievedEntity.DateTimeOffset
{2/26/2015 2:55:46 AM +00:00}
    Date: {2/26/2015 12:00:00 AM}
    DateTime: {2/26/2015 2:55:46 AM}
    Day: 26
    DayOfWeek: Thursday
    DayOfYear: 57
    Hour: 2
    LocalDateTime: {2/25/2015 6:55:46 PM}
    Millisecond: 229
    Minute: 55
    Month: 2
    Offset: {00:00:00}
    Second: 46
    Ticks: 635605161462293981
    TimeOfDay: {02:55:46.2293981}
    UtcDateTime: {2/26/2015 2:55:46 AM}
    UtcTicks: 635605161462293981
    Year: 2015

Сервер вернет UTC DateTimeOffset, поскольку нет способа выяснить, создал ли конечный пользователь DateTimeOffset, используя локальное время или время UTC при отправке.

Другие вопросы по тегам