2013-03-05 54 views
3

为什么我必须使用DateTimeKind.Local创建我的实体的DateTime属性?Azure Table Storage错误地插入日期属性

例如,我需要将其插入我的桌子前,设置以下属性,像这样:

someObject.DatePerformed = new DateTime(2012, 11, 19, 3, 3, 3, DateTimeKind.Local); 

如果我不指定DateTimeKind则保存错误(加2小时)。这发生在我的本地存储模拟器和我的Azure帐户上。我在GMT + 2小时从本地机器运行客户端应用程序。

回答

6

这不是一个Azure问题,这就是DateTime的工作原理。您需要指定对象DateTime的时区。

为避免用户在不同时区的问题,我建议将所有内容以UTC存储,然后在运行时将其解析为本地时间。

否则,当手动转换时区时,您正在走向问题的路径。

2

Azure在UTC时间运行。如果您使用的是DateTime.Now,请使用DateTime.AddHours()。

var utcOffset = 2; 
var dateValue = new DateTime(2009, 3, 1, 12, 0, 0); 
var localTime = dateValue.AddHours(utcOffset); 

或...

var localValue = DateTime.Now.AddHours(utcOffset); 
+1

由于日光节约时间(在美国),这不是一个充分的解决方案。 – 1c1cle 2014-09-15 17:08:59