将XML结束时间转换为计时器

时间:2015-10-22 11:12:14

标签: c# xml

我从此XML文件中提取了日期/时间(endTime);

<row endTime="2015-10-23 21:22:23"
     startTime="2015-10-22 07:44:31"
     endSP="90510" 
     startSP="16000" 
     level="4" 
     typeID="12366"
     queuePosition="0"/>

如何将其变为剩余时间的倒计时器?

如果结束时间是2015-10-23 13:00的例子 - 我希望它(截至目前)还剩17分38秒

**已编辑(已添加完整代码)

private void ListViewTrainingQue()
{
    listView1.View = View.Details;
    listView1.GridLines = true;
    listView1.FullRowSelect = true;

    string string2 = "https://api.eveonline.com/char/SkillQueue.xml.aspx?keyID=4602486&&vCODE=BHGVeXQkRLKLkIkZQHdeyUxmUz9EfUwbvGzoc2eO4ZR8kRMYxk8PbD4LMwLF7BvH";

    // Add Columns to listview 
    listView1.Columns.Add("Name", 108);
    listView1.Columns.Add("Level", 100);
    listView1.Columns.Add("Time till completion", 100);
    listView1.Columns.Add("Bar", 100);

    // Create Array to return values to. 
    string[] arr = new string[4];
    ListViewItem item;

   XmlDocument XMLtrans = new XmlDocument();
   XMLtrans.Load(string2);
   XmlNodeList TRnodelist = XMLtrans.SelectNodes("/eveapi/result/rowset/row");
    foreach (XmlNode xmlnode in TRnodelist)
    {

        string array = xmlnode.Attributes["endTime"].InnerText; 

        var date = DateTime.Parse(array);
        var Timespan = date - DateTime.Now;

        if (xmlnode.Attributes["typeID"] != null)
            arr[0] =  xmlnode.Attributes["typeID"].InnerText;
        if (xmlnode.Attributes["level"] != null)
             arr[1] = xmlnode.Attributes["level"].InnerText;
        if (xmlnode.Attributes["endTime"] != null)
            arr[2] = Timespan.ToString();

        item = new ListViewItem(arr);
        listView1.Items.Add(item);
    }
}

这就是我在运行它时所得到的。

enter image description here

1 个答案:

答案 0 :(得分:0)

如果我没有弄错,你的问题只是格式化时间,因为你已经可以得到差异。因此,要将其格式化为分钟和秒(即示例中为17分38秒),您可以使用TimeSpan的小时,分​​钟和秒属性。例如,以下代码块

string array = "2015-10-23 13:00"; 
var date = DateTime.Parse(array);
var Timespan = date - DateTime.Now;
Console.WriteLine(Timespan.ToString(@"hh\:mm\:ss"));
Console.WriteLine(string.Format("{0} hours {1} minutes {2} seconds", Timespan.Hours, Timespan.Minutes, Timespan.Seconds));
Console.WriteLine(string.Format("{0} minutes {1} seconds", (int)Timespan.TotalMinutes, Timespan.Seconds));

会出乎意料:

20:20:24
20 hours 20 minutes 24 seconds
1220 minutes 24 seconds

您可以选择自己喜欢的格式并使用属性进行更改。

<强>更新

所以在你的情况下,如果你想显示小时/分钟/秒,你可以使用它:

if (xmlnode.Attributes["endTime"] != null)
    arr[2] = string.Format("{0} hours {1} minutes {2} seconds", Timespan.Hours, Timespan.Minutes, Timespan.Seconds);