Как преобразовать Int во время в c#?

У меня есть целочисленные значения, такие как 06,07,08,.....,16,17,18,...

Я хочу преобразовать эти целочисленные значения в 24-часовой формат времени.

Я делаю что-то вроде этого

//fromTime holds one of the integer value.
DateTime fromTimeDate = DateTime.ParseExact(fromTime.ToString(), 
                                              "HH", 
                                              CultureInfo.InvariantCulture);  

string fromtimestring = fromTimeDate.ToString("hh:mm tt");

но это дает ошибку

"строка не распознана как действительное значение datetime."

при разборе.

что я делаю неправильно здесь. ?

7 ответов


пожалуйста, попробуйте этот код:

int val = 16;
TimeSpan result = TimeSpan.FromHours(val);
string fromTimeString = result.ToString("hh':'mm");

на самом деле, я не думаю, что DateTime является правильным типом для представления вашей потребности, так как вы заботитесь только о времени в течение дня. Дата также представляет собой день, и вы не можете его усечь (насколько я знаю).

посмотреть промежутка времени.Способ FromHours


проще всего было бы сделать что-то вроде:

DateTime time = Date.Today + new TimeSpan (0, 0, seconds);

он может потерпеть неудачу только по двум возможным причинам.

  • сначала fromTime удерживает одноразрядное целое число, от 0 to 9 и с 9 не 09 это не удалось бы с format HH.
  • вторая причина может быть, если целое больше, чем 23 или меньше 0.

вы можете изменить свой формат с одной цифрой H которая будет работать для обоих.

DateTime fromTimeDate = DateTime.ParseExact(fromTime.ToString(), "H", CultureInfo.InvariantCulture);   //fromTime holds one of the integer value.

выше будет разбор любого числа из 0 to 23.

кстати это больше похоже на TimeSpan затем DateTime, вы можете преобразовать его в TimeSpan используя промежутка времени.FromHours метод.

int fromTime = 23;
TimeSpan ts = TimeSpan.FromHours(fromTime);

формат" HH " требует двух цифр и 09 As integer-это просто "9".

использовать fromTime.ToString("00") там, чтобы заставить ведущий 0.

отметим, что дата частью этого DateTime будет "сегодня".


код, который вы написали правильно, пожалуйста, проверьте один раз...........

"fromTime" значения могут быть одной цифры, как "6" вместо " 06 "или" 0 "или"другое число более 24"

"строка не распознана как действительное значение datetime."Вы получите эту ошибку, когда используете "hh" вместо " HH " в нижней строке ..............

DateTime fromTimeDate = DateTime.ParseExact(fromTime.ToString(), "HH", 
CultureInfo.InvariantCulture);

Если вы на самом деле есть int, представляющий часы, вам не нужно делать никакого разбора вообще:

int hour = 23;
var today = DateTime.Today;
var time = new DateTime(today.Year, today.Month, today.Day, hour, 0, 0);

или (слегка измененная версия ответа @gean08 выше):

var time = DateTime.Today + TimeSpan.FromHours(hour);

 public string timeformat(int time) {
    string hr, min;
    min = Convert.ToString(time % 100);
    hr = Convert.ToString(time / 100);
    if (hr.Length == 1) hr = "0" + hr;
    if (min.Length == 1) min = "0" + min;
    return hr + ":" + min;
}