2013-04-25 3 views
6

У меня есть целочисленные значения, такие как 06,07,08, ....., 16,17,18, ...Как конвертировать Int во время в C#?

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

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

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

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

Но это дает Error

"Строка не был признан действительным DateTime."

при разборе.

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

+0

На какой строке вы получаете ошибку? – andy

+0

Я получаю ошибку на первой строке. –

+1

Ваш код работает, поэтому должна быть проблема с целым, в котором вы проходите. Я уверен, вы проходите в ноль, что не работает и дает ошибку, которую вы видите! –

ответ

18

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

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

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

См TimeSpan.FromHours Method

+0

У меня есть поле времени в MYSql db. Будет ли это работать с ним? –

+0

Я не знаю, но похоже, что тип времени ближе к типу Timespan в .Net, чем Datetime. –

3

Он может только разрушаться из-за двух возможных причин.

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

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

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

Выше было разобрать любое число от 0 до 23.

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

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

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

«Fromtime» значения могут быть однозначными числами, как «6» вместо «06» или «0» или «Другой номер более 24»

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

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

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

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

Формат "HH" нужно две цифры, и 09 как целое только "9".

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

Обратите внимание, что дата часть этого DateTime будет «сегодня».

1

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

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

Or (слегка модифицированную версию @ gean08 Ответим выше):

var time = DateTime.Today + TimeSpan.FromHours(hour); 
1
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; 
} 
+2

Можете ли вы объяснить свой ответ, пожалуйста? «Научите человека ловить рыбу» и т. Д. –

+0

мой? вы хотите, чтобы я объяснил? – praveen

+0

, если вы даете целочисленное значение , например 1020, оно будет возвращать строковое значение 10:20 ......... Он будет работать, даже если u даст 920 ... Он вернется 09:20 – praveen

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