Получение времени из DateTime

#c# #datetime #time

#c# #datetime #время

Вопрос:

Это сбивает с толку, все, что я хочу, это время из DateTime?

вот мой код:

 clsdbo_RR.DateRecd = reader["DateRecd"] is DBNull ? null : (DateTime?)reader["DateRecd"];
clsdbo_RR.TimeRecd = reader["TimeRecd"] is DBNull ? null : reader["TimeRecd"].ToString("hh:mm:ss");
  

Моя дата отображается как дата правильно, но время не отображается?

  private Nullable<DateTime> m_TimeRecd;

public Nullable<DateTime> DateRecd
{
    get
    {
        return m_DateRecd;
    }
    set
    {
        m_DateRecd = value;
    }
}
  

Комментарии:

1. В вашем вопросе не хватает информации. Что такое reader["TimeRecd"] значение и тип? И о clsdbo_RR.TimeRecd ? Где это не отображается?

2. Каков тип данных reader["TimeRecd"] ?

3. Возможно, время не было введено в базу данных.

4. @Magnetron reader — это SqlDataReader, и он находится в общедоступном статическом классе

5. @Magnetron private Обнуляемый<DateTime> m_TimeRecd;

Ответ №1:

Я сильно подозреваю, что ваш reader["TimeRecd"] возвращает object , вот почему вам нужно сначала привести его к DateTime (или DateTime? как вы это сделали), прежде чем вызывать ToString метод. Без приведения, это, вероятно, вызывает object.ToString метод, не DateTime.ToString .

Если у вас clsdbo_RR.TimeRecd есть string , вам просто нужно использовать (DateTime?)reader["TimeRecd"].ToString("hh:mm:ss") вместо этого, например;

 clsdbo_RR.TimeRecd = reader["TimeRecd"] is DBNull ? 
                     null : (DateTime?)reader["TimeRecd"].ToString("hh:mm:ss");
  

Комментарии:

1. Время не было указано в вызове хранимой процедуры. Примечание для себя: всегда устанавливайте точку останова в Reader, чтобы сначала проверить, действительно ли там данные, перед отправкой. Извините, ребята.

2. Я также должен добавить, что тип SQL Time (7) — это интервал времени в C #, а не DateTime.