使用c#将typeof(DateTime)更改为仅日期
本文关键字:日期 DateTime typeof 使用 | 更新日期: 2023-09-27 18:27:00
我正在尝试将DateTime
列添加到DataTable
。我使用这个代码:
DataTable dt = new DataTable();
dt.Columns.Add("date", typeof(DateTime));
但这需要格式为"dd.MM.yyyy HH:MM:ss"的DateTime
。
我想要的只是日期。所以typeof(DateTime)
,但只有日期。
如果你有更好的方法,请告诉我。我的方法只是我的一个想法:)
建议感谢:)
编辑:
我想使用DataTable
作为Telerik RadGridView
的DataSource
。我正在使用CellFormatting
事件,并在其中尝试填充RadGridView单元格中的日期。在这里你可以看到我使用的片段:
DateTime.ParseExact(e.CellElement.Value.ToString(), "dd.MM.yyyy HH:mm:ss", CultureInfo.CurrentCulture)
这将从逻辑上显示日期与时间的组合。但如果我把它改成
DateTime.ParseExact(e.CellElement.Value.ToString(), "dd.MM.yyyy", CultureInfo.CurrentCulture
它抛出一个异常,即这不是一个有效的DateTime格式,因为我在上面使用了typeof(DateTime)
。所以它也需要时间,否则就会抛出异常。
第2版:
这是一个Windows窗体应用程序。
DateTime
没有格式,它只有一个值。您可以以特定格式显示DateTime
,例如不显示时间。或者,可以使用Date
属性截断DateTime
的时间部分。但请注意,这不会从中删除时间分配;它只会返回CCD_ 14,它是同一日期的午夜。
因此,您仍然应该使用DateTime
作为列类型,并将格式应用于您想要diplay此字段的位置。
例如:
foreach(DataRow row in dt.Rows)
{
DateTime date = row.Field<DateTime>("date");
string dateFormatted = date.ToShortDateString(); // or ToString("d") or dt.ToString("dd.MM.yyyy")
}
如注释中所述,DateTime
结构中的数据与其格式化方式之间存在差异。如果你只关心日期,标准是把时间放在00:00:00.000。事实上,有一个DateTime的构造函数正是这样做的。
设置日期格式时,显示内容由您决定。使用ToShortDateString
可能会得到您想要的输出。
例如
DateTime myDate = new DateTime(2014, 12, 25);
string s = myDate.ToShortDateString(); // s = 12/25/2014
我建议在数据源中保留一个有效的DateTime对象,并使用网格的功能来更改单元格中显示的格式。下面是一个小例子,演示如何实现这一点。
DataTable dt = new DataTable();
dt.Columns.Add("date", typeof(DateTime));
dt.Rows.Add(DateTime.Now);
dt.Rows.Add(DateTime.Now.AddDays(1));
RadGridView grid = new RadGridView();
this.Controls.Add(grid);
grid.DataSource = dt;
GridViewDateTimeColumn dateColumn = (GridViewDateTimeColumn )grid.Columns["date"];
//this will set the format of the date displayed in the cells
dateColumn.FormatString = "{0:dd.MM.yyyy}";
//this will set the format of the editor - when the cell is opened for editing
dateColumn.Format = DateTimePickerFormat.Custom;
dateColumn.CustomFormat = "dd.MM.yyyy";
有关此列类型的更多信息,请参阅Telerik UI for WinForms文档。