在任何人将此作为副本关闭之前,我知道Azure表存储本身不支持DateTimeOffset
类型(MSDN states as much;尝试读取和写入具有{{1}的实体}属性不会抛出异常,但也不会维护正确的时间戳。
我的问题是为什么不支持这种数据类型,特别是当Azure创建时已经存在。更令人困惑的是,Azure表存储的.NET API似乎提供了对数据类型的支持:实体转换为DateTimeOffset
值的字典,而EntityProperty
类具有一个EntityProperty
属性和一个带有该类型值的构造函数。如果Azure方面不支持该类型,他们会在API中添加此支持似乎很奇怪。
答案 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。