我有一个数据表,从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移除,然后再将其传递给此方法。这是有效的,但我正在失去非常重要的秒数。
如何将时间转换为小时,分钟和秒?
答案 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分钟