Azure表存储中DateTime存储时间偏移异常问题咨询
为什么Azure表存储中存储的DateTime和预期不一致?
这事儿我碰到过好几次,核心原因其实很简单:Azure表存储默认会把所有DateTime值转换为UTC时间存储。
咱们来拆解一下你的情况:
- 你用
new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1)生成的是本地时区的00:00(比如你所在时区是UTC+5:30的印度标准时间) - 当这个值被保存到Azure表存储时,SDK会自动把本地时间转换成UTC时间。本地00:00减去UTC偏移量(+5:30),得到的就是UTC时间的前一天18:30,也就是你看到的
2018-04-01T18:30:00.000Z(末尾的Z代表UTC时区)
给你两个实用的解决办法:
- 方案一:直接生成UTC时间
跳过本地时间的转换,直接生成UTC时区的当月第一天,这样存储后就是你预期的00:00 UTC:DateTime accMonth = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, 1, 0, 0, 0, DateTimeKind.Utc); - 方案二:指定DateTime的Kind属性为UTC
如果还是想用本地时间生成日期,记得手动指定Kind为UTC,避免SDK自动做时区转换:DateTime localAccMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); DateTime accMonth = DateTime.SpecifyKind(localAccMonth, DateTimeKind.Utc);
另外补充个小细节:当你从表存储读取这个值时,SDK默认返回的是UTC时间,如果需要转成你的本地时间,可以用DateTime.ToLocalTime()方法处理。
内容的提问来源于stack exchange,提问作者Mandar Jogalekar
相关产品推荐
相关产品推荐

