为了账号安全,请及时绑定邮箱和手机立即绑定

使用 DataRowExtension 解析 TimeSpan

使用 DataRowExtension 解析 TimeSpan

C#
慕妹3146593 2022-06-12 10:26:15
我想使用 DataRowExtension 将 DataRow 中的字段值作为 TimeSpan(格式如 mm:ss),但它给了我 System.InvalidCastException,如下所示var time = staffItems.Rows[0].Field<TimeSpan>("TIME_DURATION"); // System.InvalidCastException但是当将此值作为字符串并在 Parse to TimeSpan 之后没有问题发生。var time = staffItems.Rows[0].Field<string>("TIME_DURATION"); // time : 0:43var time2 = TimeSpan.Parse(time); // time2 : 00:43:00问题是,我如何在没有任何额外解析或强制转换的情况下使用 DataRowExtension 来做到这一点。
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

可能 TIME_DURATION 字段来自 DataTable 的 vharchar 或其他内容。它必须等同于 TimeSpan。



查看完整回答
反对 回复 2022-06-12
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

首先你必须解析然后获取时间部分


var time = TimeSpan.Parse(staffItems.Rows[0]["TIME_DURATION"]);

var time2 = time.ToString(@"mm\:ss");

如果你想从 datarowextension 获得它。您必须创建数据表并为“TIME_DURATION”列指定时间对象。您可以通过以下方法做到这一点:


using System;

using System.Data;


class Program

{

    static void Main()

    {

        //

        // Loop over DataTable rows and call the Field extension method.

        //

        foreach (DataRow row in GetTable().Rows)

        {

            // Get first field by column index.

            int weight = row.Field<int>(0);


            // Get second field by column name.

            string name = row.Field<string>("Name");


            // Get third field by column index.

            string code = row.Field<string>(2);


            // Get fourth field by column name.

            DateTime date = row.Field<DateTime>("Date");


            // Display the fields.

            Console.WriteLine("{0} {1} {2} {3}", weight, name, code, date);

        }

    }


    static DataTable GetTable()

    {

        DataTable table = new DataTable(); // Create DataTable

        table.Columns.Add("Weight", typeof(int)); // Add four columns

        table.Columns.Add("Name", typeof(string));

        table.Columns.Add("Code", typeof(string));

        table.Columns.Add("Date", typeof(DateTime));

        table.Rows.Add(57, "Koko", "A", DateTime.Now); // Add five rows

        table.Rows.Add(130, "Fido", "B", DateTime.Now);

        table.Rows.Add(92, "Alex", "C", DateTime.Now);

        table.Rows.Add(25, "Charles", "D", DateTime.Now);

        table.Rows.Add(7, "Candy", "E", DateTime.Now);

        return table;

    }

}


查看完整回答
反对 回复 2022-06-12
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

下面的方法将 a 解析string为扩展方法TimeSpan中的 a 。DataRow


public static TimeSpan ExtractTimeData(this DataRow row, string column)

{

    // check column exists in dataTable

    var exists = row.Table.Columns.Contains(column);


    if (exists)

    {

        // ensure we're not trying to parse null value

        if (row[column] != DBNull.Value)

        {

            TimeSpan time;


            if (TimeSpan.TryParse(row[column].ToString(), out time))

            {

                // return if we can parse to TimeSpan

                return time;

            }

        }

    }


    // return default TimeSpan if there is an error

    return default(TimeSpan);

}

你可以像这样使用它:


TimeSpan time = row.ExtractTimeData("TIME_DURATION");

string timeString = time.ToString(@"h\:mm");


查看完整回答
反对 回复 2022-06-12
  • 3 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号