为什么Azure Table Storage不支持DateTimeOffset?

时间:2015-02-23 14:14:41

标签: c# azure azure-storage datetimeoffset

在任何人将此作为副本关闭之前,我知道Azure表存储本身不支持DateTimeOffset类型(MSDN states as much;尝试读取和写入具有{{1}的实体}属性不会抛出异常,但也不会维护正确的时间戳。

我的问题是为什么不支持这种数据类型,特别是当Azure创建时已经存在。更令人困惑的是,Azure表存储的.NET API似乎提供了对数据类型的支持:实体转换为DateTimeOffset值的字典,而EntityProperty类具有一个EntityProperty属性和一个带有该类型值的构造函数。如果Azure方面不支持该类型,他们会在API中添加此支持似乎很奇怪。

1 个答案:

答案 0 :(得分:3)

实际上它受支持,服务器端将本地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,因为无法确定最终用户是否在发送时使用本地或UTC时间创建了DateTimeOffset。

相关问题