C#计算出时区差异的时间和日期



我遇到了一个小问题,我正在连接到Pokerstars.com数据源以获取有关预定扑克锦标赛信息的更新(https://www.pokerstars.com/datafeed/tournaments/all.xml)

然后,我解析信息并将其存储在Winforms应用程序的listView中,但我需要计算出正确的时间,包括本地时区差异。我知道Pokerstar服务器在-05:00运行,但我的问题是将其转换为应用程序特定用户的正确时间。

有人能算出代码,将其转换为该用户的本地时间,从而显示正确的开始时间吗。以下是我用来读取XML文件的代码:

    private void LoadAllTournaments()
    {
        DataSet ds = new DataSet();
        ds.ReadXml("http://46.101.5.145/Feeds/all.xml");
        ListViewItem item;
        foreach (DataRow dr in ds.Tables["tournament"].Rows)
        {
            StartDate = dr["start_date"].ToString();
            if (dr["play_money"].ToString() != "true")
            {
                FPPFee = Convert.ToInt32(dr["fpp_fee"]);
                if (FPPFee == 0)
                {
                    if (dr["buy_in_fee"].ToString() != "$0 + $0")
                    {
                        item = new ListViewItem(new string[] { dr["name"].ToString(), StartDate.Substring(0, 10), StartDate.Substring(12, 7), dr["buy_in_fee"].ToString(), dr["prize"].ToString(), dr["players"].ToString(), dr["status"].ToString(), dr["id"].ToString()});
                        listView1.Items.Add(item);
                    }
                }
            }
        }
    }

为了记录在案,我连接到自己的服务器来读取文件,因为Pokerstar只允许来自英国的人查看XML文件,所以他们每10分钟下载一次到我的英国VPS。

在xml中,提供的值如下:

<start_date>2015-11-02T12:50:00-05:00</start_date>

因此,您不需要预先了解服务器的时区,因为偏移量已编码在数据中。只需将字符串解析为DateTimeOffset,然后使用TimeZoneInfo转换为用户的时区。

DateTimeOffset startDate = DateTimeOffset.ParseExact(
    (string) dr["start_date"],
    "yyyy-MM-dd'T'HH:mm:sszzz",
    CultureInfo.InvariantCulture);
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
DateTimeOffset converted = TimeZoneInfo.ConvertTime(startDate, tz);

在上面的示例中,"GMT Standard Time"是伦敦的Windows时区标识符,在冬季使用GMT(UTC+00:00),在夏季使用BST(UTC+01:00)。当然,您需要知道哪个时区实际上适用于您的用户。

在代码的后面,您使用Substring来提取部分日期——您不应该这样做,而是应该使用格式化字符串。例如,converted.ToString("d")表示日期,converted.ToString("t")表示时间。请参阅MSDN中的标准和自定义格式字符串。

首先必须将StartDate解析为日期时间。我不知道字符串是什么,你可能需要更精确地解析它,但总的来说:

DateTime origDate = DateTime.Parse(StartDate);

然后再加上或减去小时,就可以得到你想要的时区。例如:

DateTime newDate =   origDate.AddHours(-1);

减去一小时。

相关内容

  • 没有找到相关文章

最新更新