当时间是小数时,如何转换为DateTime?

时间:2013-12-20 18:28:41

标签: c# date datetime

我有一个数据表,从Sage 100 ERP到具体,它使用两个单独的列来存储更新的日期和时间(DateUpdated和TimeUpdated)。我需要将这两个字段中的数据转换为DateTime对象进行比较。日期看起来像“mm / dd / yyyy 12:00 AM”,时间是小数,如14.29297。到目前为止,我已经能够将时间转换为分钟,如下所示:

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移除,然后再将其传递给此方法。这是有效的,但我正在失去非常重要的秒数。

如何将时间转换为小时,分钟和秒?

6 个答案:

答案 0 :(得分: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和{{1} }。

答案 1 :(得分:1)

看起来你可以避免所有额外的处理,只需这样做:

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

答案 2 :(得分:0)

如果不是typo - 您缺少将seconds值附加到datetime字符串。

替换它:

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

有了这个:

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

答案 3 :(得分:0)

假设您的计算是正确的,您是否尝试将第二个组件附加到datetime变量,如下所示:

  

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

答案 4 :(得分: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();

希望有所帮助

答案 5 :(得分:0)

将单个数据库字段的小数转换为小时和分钟

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

输出为1小时/ 45分钟