【发布时间】:2017-03-15 01:51:29
【问题描述】:
我编写了一个代码,它基本上可以在 PST 时区从我的数据库中提取事务。我想做的只是将这些日期转换为 CEST 时区和 IST(以色列标准时间)。
我做了如下的事情:
var transactions = ctx.UserStores.Where(x => x.UserId == loggedUser.UserId).SelectMany(x => x.StoreItems.SelectMany(y => y.StoreItemTransactions)).ToList();
var hourlyData = transactions
.GroupBy(x => TimeZoneInfo.ConvertTime(x.TransactionDate.Value, TimeZoneInfo.FindSystemTimeZoneById(timeZone)).Hour)
.Select(pr => new HourlyGraph { Hour = pr.Key, Sales = pr.Sum(x => x.QuantitySoldTransaction) })
.ToList();
其中 timeZone 参数可以是以下之一:
Central European Standard Time
Israel Standard Time
Pacific Standard Time
自然地,当 timeZone 参数为 = PST 时,我希望在我的列表中得到相同的结果......但奇怪的是结果完全被打乱了,我不知道为什么......
因此,我的数据库中的日期保留在 PST 时区,我正在尝试将它们转换为上述 3 个时区之一...
我在这里做错了什么??
【问题讨论】:
-
x.TransactionDate.Value.Kind的值是多少,代码运行在哪个时区?您是否尝试过使用需要两个TimeZoneInformationobjects(源和目标)的TimeZoneInfo.ConvertTime()版本 -
“结果完全被打乱了”——这到底是什么意思?我不清楚你的问题到底是什么。结果的顺序是否错误(我假设是改组的)?时间不正确吗?还有什么?如果你能给出一个关于你的问题的最小完整示例,那将有很大帮助。
-
@NineBerry 它说日期时间 kind = System.DateTimeKind.Unspecified
-
@NineBerry 我没用过,你能举个例子吗?
-
@Chris 我知道事实上结果存储在 PST 时区。但是当我传递参数timezone=PST时,结果就完全不同了。但它们不应该是,它们应该与 DB 中的完全相同 =/