2015-06-18 4 views
0

У нас есть таблица данных с 3 полями Дата (тип строки) (MM/dd/YYYY) Часы (тип строки) (формат 24 часа) и минуты (строка Тип) Мне нужно, чтобы создать еще один столбец, который даты времени на основе из вышеупомянутых 3 столбцов и нужно сортировать таблицу данных к тому времени даты колонку
Преобразование строки даты и строки времени в datetime в C#

Date  Hours Minutes 
5/19/2015 12  30 
11/18/2015 23  45 

Я пытался создать строку, как это Date +" "+Hours+":"+ Minutes и преобразован в дату и время. Но я получаю ошибку

«String не был признан действительным DateTime».

может любой помочь мне в этом вопросе, пожалуйста,

+1

Почему вы храните все как строку? –

+1

Вам просто нужно поле в качестве 'DateTime'. Можем ли мы увидеть вашу работу? –

ответ

0

Вам нужно перебирать ваши DataTable и использовать DateTime.ParseExact с явной строки формата, так:

DataTable dt; 
foreach (var row in dt.Rows) 
    row["DateTime"]=DateTime.ParseExact(row.Date +" "+row.Hours+":"+ row.Minutes,"MM/dd/yyyy HH:mm",null) 
0

Почему вы храните все как строки в первое место? Тем не менее, вы можете построить полный DateTime, используя DateTime.TryParseExact. Затем вы можете использовать Linq-To-DataTable для заказа. Наконец создать упорядоченную таблицу с CopyToDataTable:

table.Columns.Add("DateColumn", typeof(DateTime)); 
foreach (DataRow row in table.Rows) 
{ 
    string dateTimeString = String.Format("{0} {1}:{2}", 
     row.Field<string>("Date"), 
     row.Field<string>("Hours"), 
     row.Field<string>("Minutes")); 
    DateTime date; 
    if(DateTime.TryParseExact(dateTimeString, "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)); 
    { 
     row.SetField("DateColumn", date); 
    } 
} 
table = table.AsEnumerable() 
    .OrderBy(row => row.Field<DateTime>("DateColumn")) 
    .CopyToDataTable(); 

Так что вам не нужно хранить часы и минуты отдельно, а DateTime хранит все сведения в одном объекте. Три из ваших столбцов в таблице являются избыточными.

0

Использование ParseExact метод. Я нашел это очень просто

table.Columns.Add("MixedData",typeof(DateTime)); 
    foreach (DataRow row in table.Rows) 
    { 
        DateTime date = DateTime.ParseExact(row["Dates"].ToString() + " " + row["Hours"] + ":" + row["Minutes"], "M/dd/yyyy H:mm", CultureInfo.InvariantCulture); 
        row["MixedData"] = date; 
        table.AcceptChanges(); 
    } 
+0

Уважаемый Imadoddin Ибн Алауддин, я попробовал, как вы предлагаете, но iam получает ту же ошибку «String не был признан действительным DateTime». – TARUN

+0

Пожалуйста, проверьте, какую строку вы получаете, прежде чем получать сообщение об ошибке – Imad

+0

Я получаю такие строки, как это 19/19/2015 22:30, 5/19/2015 12: 00,5/22/2015 23:40 – TARUN

Смежные вопросы