2015-02-23 22 views
3

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

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

+4

我正在投票结束这个问题作为题外话,因为它看起来像是MS团队有任何原因的选择(时间限制?)。在这里问这是要求推测。 – Eddy 2015-02-23 14:28:34

+1

我不同意它正在呼吁投机。作为提出有关Azure的问题的两个建议论坛之一(他们建议的其他论坛是MSDN),Microsoft链接到Stack Overflow。在这里提出这个问题是呼吁知道答案的人回应。如果有人不知道这个问题的答案,但是想把推测当作事实,那么这就是他们的问题,而不是问题的问题。 – 2016-01-30 07:38:26

回答

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,因为没有办法弄清楚,如果最终用户在发送时使用本地或UTC时间创建DateTimeOffset。

+2

感谢您的回复。我同意Azure表存储_.NET API_支持'DateTimeOffset',但似乎很明显,在事物的云端,'DateTimeOffset'类型本身不受支持,只有常规的'DateTime'类型,它是为什么.NET API必须执行从一种类型到另一种类型的转换。我的问题真的在问为什么'DateTimeOffset'不支持作为云侧的类型。 – 2015-03-03 10:41:20

相关问题