首页 文章

在C#中转换时区

提问于
浏览
1

我编写了一个代码,基本上可以从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

Naurally当timeZone参数是= PST时,我希望在我的列表中得到相同的结果...但奇怪的是结果完全被洗牌,我不知道为什么......

所以我的数据库中的日期保存在PST时区,我正在尝试将它们转换为以上3个时区中的一个...

我在这做错了什么?

1 回答

  • 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

相关问题