编程语言
首页 > 编程语言> > c#-为什么Azure表存储不支持DateTimeOffset?

c#-为什么Azure表存储不支持DateTimeOffset?

作者:互联网

在任何人将其作为副本关闭之前,我知道Azure表存储本身不支持DateTimeOffset类型(MSDN states as much;尝试读写具有DateTimeOffset属性的实体不会引发异常,但不会维护正确的时间戳记要么).

我的问题是为什么不支持此数据类型,尤其是当创建Azure时就已经存在.更令人困惑的是,用于Azure Table Storage的.NET API似乎提供了对数据类型的支持:实体被转换成EntityProperty值的字典,而EntityProperty类既具有DateTimeOffsetValue属性,又具有采用值的构造函数.这种类型.似乎奇怪的是,如果事物的Azure端仍然不支持该类型,他们会在API中添加此支持.

解决方法:

实际上它是受支持的,发生的是服务器端将本地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.

标签:datetimeoffset,azure,azure-storage,c
来源: https://codeday.me/bug/20191120/2045904.html