2013-12-20 1 views
2

У меня есть таблица данных, из Sage 100 ERP, для конкретной, которая использует два отдельных столбца для хранения обновленной даты и времени (DateUpdated и TimeUpdated). Мне нужно преобразовать данные в эти два поля в объект DateTime для сравнения. Даты выглядят как «mm/dd/yyyy 12:00 AM», а время - десятичное, как 14.29297. До сих пор я был в состоянии преобразовать время в минуту, следующим образом:Как мне преобразовать в DateTime, когда время является десятичным?

private DateTime GetDateTime(string date, decimal time) 
    { 
     int hour = int.Parse(Math.Floor(time).ToString()); 
     decimal minTemp = decimal.Parse((60 * (time - hour)).ToString()); 
     int min = int.Parse(Math.Round(minTemp).ToString()); 
     int sec = int.Parse(Math.Round(60 * (minTemp - min)).ToString()); 

     string datetime = date + " " + hour.ToString() + ":" + min.ToString(); 

     return DateTime.Parse(datetime); 
    } 

я удалить 12:00 AM из строки даты, прежде чем я передать его к этому методу. Это работает, но я теряю секунды, которые очень важны.

Как я могу конвертировать время в часы, минуты и секунды?

+0

Может захотеть обратиться к следующему сообщению: http://stackoverflow.com/questions/1933320/convert-a-date-to-string-in-javascript – Sparebrain

+1

Можете ли вы предоставить образец времени? – hanskishore

+0

Что именно представляет собой десятичное значение? –

ответ

1

Похоже, что вы могли бы избежать всего, что дополнительной обработки и просто сделать это:

DateTime GetDateTime(string date, decimal time) 
{ 
    return DateTime.Parse(datetime).AddHours((double)time); 
} 
+0

Спасибо, Кори, это то, что я закончил, основываясь на ответе Мэтта. –

0

если это не typo - вам не хватает, чтобы добавить значение seconds в строку datetime.

Заменить Это:

string datetime = date + " " + hour.ToString() + ":" + min.ToString(); 

с этим:

string datetime = date + " " + hour.ToString() + ":" + min.ToString()+ ":" + sec.ToString(); 
+0

Я не верю, что расчет секунд правилен. Он всегда выходит -1. –

+0

@ user2842689: не могли бы вы предоставить нам пример десятичного значения времени? –

+0

Время как 14.29297 –

0

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

string datetime = date + "" + hour.ToString() + ":" + min.ToString() + ":" + sec.ToString()

0

Для секунд попробовать что-то вроде этого:

int secTemp = int.Parse((Math.Round(60 * (minTemp - min))).ToString()); 
int sec = (secTemp<0?60 + secTemp:secTemp); 
string datetime = date + " " + hour.ToString() + ":" + min.ToString()+ ":" + sec.ToString(); 

Надеется, что это помогает

1

Просто разобрать, что у вас есть:

private DateTime GetDateTime(string date, decimal time) 
{ 
    DateTime dt = DateTime.ParseExact(date, "MM/dd/yyyy hh:mm tt", 
             CultureInfo.InvariantCulutre); 

    double hours = Convert.ToDouble(time); 

    return dt.AddHours(hours); 
} 

Конечно, было бы намного проще если у вас были правильные типы данных для начала. У меня есть ощущение где-то у вас есть DateTime и double в любом случае (возможно, когда вы читаете данные из базы данных), и вы неправильно конвертируете их в string и decimal.

+0

Кроме того, я получал исключение из ParseExact, поэтому я просто делаю DateTime.Parse (date). Это дает мне правильные значения DateTime. –

+1

Если вы получали исключение, то у вас, вероятно, есть данные, которые не соответствуют предоставленному формату. Теперь вы, вероятно, скрываете эту проблему. Быть осторожен. –

0

Скрытой Десятичный час и минуту для поля единой базы данных

 double convertData = 1.75 
     TimeSpan timespan = TimeSpan.FromHours(convertData); 
     string outputH = timespan.ToString("hh"); 
     string outputM = timespan.ToString("mm"); 

выход будет 1 часы/45 мин

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