2013-12-20 93 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分

相关问题