如何使用C#只获取时间戳的时间部分而不带时区并将其放入datagridview中?
我在将DateTime格式转换为datagridview时遇到问题。基本上情况是这样的:在数据库中,我有4列,类型为:TIMESTAMP,不带时区。我使用SQL查询从数据库中获取数据,我想写的是没有时区类型的时间戳,没有日期,只有时间 前。 第一行列“Arrival”有值:“2017-03-08 14:44:32”,我想从该单元格中获取“14:44:32”,并将其放入datagridview的“Arrival”列中。当我发出如下命令时:如何使用C#只获取时间戳的时间部分而不带时区并将其放入datagridview中?,c#,sql,winforms,datagridview,timestamp,C#,Sql,Winforms,Datagridview,Timestamp,我在将DateTime格式转换为datagridview时遇到问题。基本上情况是这样的:在数据库中,我有4列,类型为:TIMESTAMP,不带时区。我使用SQL查询从数据库中获取数据,我想写的是没有时区类型的时间戳,没有日期,只有时间 前。 第一行列“Arrival”有值:“2017-03-08 14:44:32”,我想从该单元格中获取“14:44:32”,并将其放入datagridview的“Arrival”列中。当我发出如下命令时: foreach (DataRow row in dt.R
foreach (DataRow row in dt.Rows)
{
string spremanje_string = row["Arrival"].ToString();
string pretvorba = spremanje_string.Substring(spremanje_string.IndexOf(' ') + 1);
row["Arrival"] = DateTime.ParseExact(pretvorba, "HH:mm:ss", CultureInfo.InvariantCulture);
}
(不介意foreach,它只是该循环代码的一部分)
C#给了我一个错误,说:
An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll
Additional information: String was not recognized as a valid DateTime.
我可以想出三种解决方案
dataGridViewName.Columns["columnName"].DefaultCellStyle.Format = "HH:mm:ss";
foreach (DataRow row in dt.Rows)
{
string dateTime = row["Arrival"].ToString();
string time = dateTime.Split(' ')[1];
//Do not convert to DateTime, no use if you will only use it to display (string)
row.Cells["Arrival"].Value = time;
}
第2个示例:
dataGridViewName.Columns["columnName"].DefaultCellStyle.Format = "HH:mm:ss";
foreach (DataRow row in dt.Rows)
{
string dateTime = row["Arrival"].ToString();
string time = dateTime.Split(' ')[1];
//Do not convert to DateTime, no use if you will only use it to display (string)
row.Cells["Arrival"].Value = time;
}
第3个示例:
将日期值添加到DataGridView时(据我所知,这对数据源不起作用):
如果您的行[“Arrival”]是DateTime,则可以使用.TimeOfDay
这会给你一个时间跨度
因此,这里有几种可能的解决方案:
- 您可以将行[“Arrival”]的类型更改为TimeSpan,并在从数据库读取时获取TimeOfDay
- 如果只需要显示时间(无需排序和编辑),请在DateTime上使用.ToString(“HH:mm:ss”)来获取字符串
- 如果您使用的是WPF,那么可以在绑定中使用DataGridTextColumn和StringFormat={HH:mm:ss}
日期时间
而不仅仅是字符串
或者可能是时间跨度
?我没有制定规则=)你想要一个没有日期的日期时间吗?这不是datetime问题是,datetime是用于数据库的,我想要的是用于用户部分,当您没有4列带有日期+时间,一列带有相同日期时,更容易阅读。。。。。现在您就明白为什么了。在向DataGridView添加DateTime时,只需执行DateTime.TimeOfDay而不是DateTime我有一个问题:在Ex.nr 1中:您的意思是我在执行之后需要执行该操作:datagridview1.DataSource=dt代码>foreach基于您的,将其放置在您拥有的任何位置。但是考虑到它从DataGrid获取一个值,网格必须首先有值DataSource@MarkoPetrePetričevićI添加了一种更简单的方法,即最后一种。我建议你使用它,因为它不必在一个循环中,而且只是一行。是吗,当我开始调试时,它说可变时间是时间的一部分,而且一切看起来都很好,但它在datagridview上并没有这样显示,我很困惑,我所做的一切,调试都显示了很好,但当它在datagridview上显示时,它并没有应用那个更改。