【问题标题】:how to split date & time from xml如何从xml中拆分日期和时间
【发布时间】:2014-05-10 14:00:27
【问题描述】:

我有一个 XML 文件,其中包含这样的日期和时间

  <date>3/24/2014</date>
  <time>9:00 AM</time>
</playdate>

我将此数据存储在数据集中并希望添加到数据表中。我写这段代码是为了获取数据

                DataRow dr = dt.NewRow();
                dr["StartDate"] = ds.Tables[0].Rows[i][1].ToString();
                dr["StartTime"] = ds.Tables[0].Rows[i][1].ToString();

但问题是当我在 excel 文件中导出数据时,我在同一列中的 excel 文件中同时获得了日期和时间。我想要 StartDate 中的日期和 StartTime 中的时间。如何拆分 XML 数据

编辑

        string url = @"c:\temp\TestXML.xml";
        StreamReader reader = new StreamReader(url);
        string input = reader.ReadToEnd();
        input = input.Trim();
        input = input.Replace("- <", " <");
        input = input.Replace(" & ", " &#38; ");
        input = input.Replace("W&W", "W&#38;W");
        input = input.Replace("", "&#13;");
        int userid = 0;
        int j = 1;

        try
        {
            DataSet ds = new DataSet();
            ds.ReadXml(new StringReader(input));
            // Creating Data Table according to Table Value Parameter in Database
            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("CalenderName", typeof(string)));
            dt.Columns.Add(new DataColumn("EventName", typeof(string)));
            dt.Columns.Add(new DataColumn("StartDate", typeof(DateTime)));
            dt.Columns.Add(new DataColumn("EndDate", typeof(DateTime)));
            dt.Columns.Add(new DataColumn("StartTime", typeof(DateTime)));
            dt.Columns.Add(new DataColumn("EndTime", typeof(DateTime)));
            dt.Columns.Add(new DataColumn("Venue", typeof(string)));
            dt.Columns.Add(new DataColumn("Address", typeof(string)));
            dt.Columns.Add(new DataColumn("City", typeof(string)));
            dt.Columns.Add(new DataColumn("State", typeof(string)));
            dt.Columns.Add(new DataColumn("ZipCode", typeof(string)));
            dt.Columns.Add(new DataColumn("PhoneNo", typeof(string)));
            dt.Columns.Add(new DataColumn("Link", typeof(string)));
            dt.Columns.Add(new DataColumn("Email", typeof(string)));
            dt.Columns.Add(new DataColumn("Performer", typeof(string)));
            dt.Columns.Add(new DataColumn("Tags", typeof(string)));
            dt.Columns.Add(new DataColumn("Price", typeof(string)));
            dt.Columns.Add(new DataColumn("PriceURL", typeof(string)));
            dt.Columns.Add(new DataColumn("EventDetails", typeof(string)));
            dt.Columns.Add(new DataColumn("TimeZoneName", typeof(string)));
            dt.Columns.Add(new DataColumn("TimeZoneOffsetAtCreation", typeof(int)));
            dt.Columns.Add(new DataColumn("TabIndex", typeof(int)));

            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                DataRow dr = dt.NewRow();

                string sDate = ds.Tables[2].Rows[i][0].ToString();
                string sTime = ds.Tables[2].Rows[i][1].ToString();
                DateTime dDateTime;
                //cond: for checking the datetime parsing
                if (DateTime.TryParseExact(sDate, "m/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dDateTime))
                {
                    //sDate  = dDateTime.ToString("M/dd/yyyy");
                    //dr["StartDate"] = sDate;  
                    dr["StartDate"] = dDateTime;
                }
                //cond: for checking the datetime parsing
                if (DateTime.TryParseExact(sTime, "hh:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out dDateTime))
                {
                    //sTime  = dDateTime.ToString("h:mm:ss");
                    //dr["StartTime"] = sTime;
                    dr["StartTime"] = dDateTime;
                }
                dr["EventName"] = ds.Tables[0].Rows[i][1].ToString();
                //dr["StartDate"] = ds.Tables[2].Rows[i][0].ToString();
                //dr["EndDate"] = ds.Tables[2].Rows[i][0].ToString();
                //dr["StartTime"] = ds.Tables[2].Rows[i][1].ToString();
                //dr["EndTime"] = ds.Tables[2].Rows[i][1].ToString();
                dr["Venue"] = ds.Tables[1].Rows[i][1].ToString();
                dr["Address"] = ds.Tables[1].Rows[i][2].ToString();
                dr["City"] = ds.Tables[1].Rows[i][4].ToString();
                dr["State"] = ds.Tables[1].Rows[i][5].ToString();
                dr["ZipCode"] = Convert.ToInt32(ds.Tables[1].Rows[i][6].ToString());
                dr["PriceURL"] = ds.Tables[0].Rows[i][2].ToString();
                dr["EventDetails"] = ds.Tables[0].Rows[i][4].ToString();
                dt.Rows.Add(dr);
                j++;
            }

            gvXmlData.DataSource = dt;
            gvXmlData.DataBind();
            btnExportData.Visible = true;

【问题讨论】:

  • 你能在excel文件中显示样本值吗?
  • 2014 年 3 月 31 日上午 9:00:00 此数据显示在单个列中,而不是在单独的列中

标签: c# xml datatable dataset


【解决方案1】:

试试DateTime.ParseExact

string cellValue = "3/31/2014 9:00:00 AM";// this can be a cell value from excel file like ds.Tables[0].Rows[i][1].ToString()
DateTime date = DateTime.ParseExact(
            cellValue, 
            "M/dd/yyyy h:mm:ss tt", 
            CultureInfo.InvariantCulture);

string startDate  = date.ToString("M/dd/yyyy");
string startTime  = date.ToString("h:mm:ss tt");

【讨论】:

  • 但我正在调用 XML 文件。我只是发布了我的 XML 文件的示例 XML 格式。必须更改日期和时间..
  • 日期和时间不是一个字符串。它有一个单独的标签.. 看看我的问题
【解决方案2】:

您在 StartDateStartTime 中访问相同的单元格值。 很可能下一个单元格应该给你时间价值。

您还可以设置与 XML 中指定的日期时间相同的格式,例如(mm/dd/YYYY) 时间小时分钟和秒也是如此。

在此处查看代码示例:

string sDate = ds.Tables[0].Rows[i][0].ToString();
string sTime = ds.Tables[0].Rows[i][1].ToString();  
DateTime dDateTime;     
DataRow dr = dt.NewRow();
//cond: for checking the datetime parsing
if (DateTime.TryParseExact(sDate, "M/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dDateTime))
{   
    //sDate  = dDateTime.ToString("M/dd/yyyy");
    //dr["StartDate"] = sDate;  
            dr["StartDate"] = dDateTime;
}   
//cond: for checking the datetime parsing
if (DateTime.TryParseExact(sTime, "hh:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out dDateTime))
{   
    //sTime  = dDateTime.ToString("h:mm:ss");
    //dr["StartTime"] = sTime;
              dr["StartTime"] = dDateTime;  
}

【讨论】:

  • say [0] 给我日期和 [1] 给我时间,但这不是我得到的。[0] 或 [1] 都给我日期和时间在同一个单元格中
  • 请在此处发布您的输出。您需要在日期和时间上应用格式以获得所需的值。
  • 我得到的输出 StartDate StartTime 3/24/2014 12:00AM 3/31/2014 09:00AM
  • 试试上面的代码示例。您需要解析为 dateTime 数据类型并根据需要仅提取日期和时间。检查其他格式的链接以及csharp-examples.net/string-format-datetime
  • DataTable 中 StartDateStartTime 列的数据类型是什么?
猜你喜欢
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多