2013-12-20 123 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之前,我將它傳遞給這個方法。這很有效,但我放鬆了非常重要的秒鐘。

如何將時間轉換爲小時,分鐘和秒?

+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(也許當你從數據庫讀取數據時),並且你不正確地將它們轉換爲stringdecimal

+0

另外,我得到一個與ParseExact異常,所以我只是在做DateTime.Parse(日期)。它給了我正確的DateTime值。 –

+1

如果您收到異常,那麼您的數據可能與提供的格式不匹配。現在你可能隱藏了這個問題。小心。 –

0

隱蔽小數到小時和分鐘爲單數據庫字段

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

輸出將是1小時/ 45分

相關問題