【问题标题】:Converting time zones in C#在 C# 中转换时区
【发布时间】: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 中的完全相同 =/

标签: c# datetime timezone


【解决方案1】:

使用TimeZoneInfo.ConvertTime 版本的示例代码需要源时区和目标时区。

DateTime sourceTime = new DateTime(2015, 6, 10, 10, 20, 30, DateTimeKind.Unspecified);

TimeZoneInfo sourceTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");

foreach(var targetTimeZoneID in new string[] { "Pacific Standard Time", "Israel Standard Time", "Central European Standard Time" })
{
    TimeZoneInfo targetTimeZone = TimeZoneInfo.FindSystemTimeZoneById(targetTimeZoneID);
    var converted = TimeZoneInfo.ConvertTime(sourceTime, sourceTimeZone, targetTimeZone);

    Console.WriteLine("{0}: {1:yyyy-MM-dd HH:mm:ss}", targetTimeZoneID, converted);
}
Console.ReadLine();

输出是:

太平洋标准时间:2015-06-10 10:20:30
以色列标准时间: 2015-06-10 20:20:30
中欧标准时间:2015-06-10 19:20:30

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 2014-11-17
    • 1970-01-01
    • 2012-02-10
    相关资源
    最近更新 更多