将datetime对象数组转换为日期对象数组

时间:2015-10-28 09:12:00

标签: c# arrays datetime object

我有一个返回Object数组的方法。在Object数组中,数据是datetime。我需要将DateTime数组转换为date数组。 responseRows会返回DateTime个数据。有没有办法可以将DateTime转换为日期数组。

代码

public static object[] ExtractColumn(ResponseRow[] responseRows, int columnIndex)
{
    if (columnIndex < 0)
    {
        return null;
    }            
    return responseRows.Select(x => x.RowData[columnIndex]).ToArray();
}

3 个答案:

答案 0 :(得分:0)

由于没有针对c#的Date数据类型,因此可以使用零来获取DateTime对象中的Date部分。您可以将列转换为DateTime Convert.ToDateTime对象,然后使用Date属性,仅获取日期部分。

public static DateTime[] ExtractColumn(ResponseRow[] responseRows, int columnIndex)
{
    if (columnIndex < 0)
    {
        return null;
    }            
    return responseRows.Select(x => Convert.ToDateTime(x.RowData[columnIndex]).Date).ToArray();
}

修改如果您的列已经是DateTime类型,那么您不需要Convert.ToDateTime

答案 1 :(得分:0)

因此,您不知道传递给此方法的列是DateTime列。但如果是你要删除时间部分。检查类型以及是否DateTime使用DateTime.Date

public static object[] ExtractColumn(ResponseRow[] responseRows, int columnIndex)
{
    if (columnIndex < 0)
    {
        return null;
    }
    object[] objects = new object[responseRows.Length];
    for (int i = 0; i < objects.Length; i++)
    {
        object data = responseRows[i].RowData[columnIndex];
        if(data is DateTime)
            data = ((DateTime)data).Date;
        objects[i] = data;
    }
    return objects;
}

这个循环比LINQ方法更有效。无论如何你想看到它:

object[] objects = responseRows
    .Select(rr => rr.RowData[columnIndex])
    .Select(data => data is DateTime ? ((DateTime)data).Date : data)
    .ToArray();

答案 2 :(得分:0)

感谢大家的时间。在您的评论的帮助下,我能够解决我的问题,如下所示:

public static object[] ExtractColumn(ResponseRow[] responseRows, int columnIndex)
{
    if (columnIndex < 0)
    {
        return null;
    }
    if (responseRows.Any(x => x.RowData[columnIndex] is DateTime))
    {
        return responseRows.Select(x => Convert.ToDateTime(x.RowData[columnIndex]).Date).Cast<object>().ToArray();                
    }
    return responseRows.Select(x => x.RowData[columnIndex]).ToArray();
}