取DateTime值并只接受时间,反之亦然
本文关键字:时间 反之亦然 DateTime | 更新日期: 2023-09-27 18:29:40
我目前正在开发一个应用程序来作为待办事项列表,我想知道如何接受日期-时间框中的值,但只使用日期值或时间值。我现在是这样做的。
DateTime ted = appointmentDateTimeDate.Value; //The date
DateTime at = appointmentDateTimeTime.Value; //The time
我应该换一种方式吗?
使用DateTime.Date
属性表示日期,使用DateTime.TimeOfDay
属性表示时间:
DateTime ted = appointmentDateTimeDate.Date; //The date
TimeSpan at = appointmentDateTimeTime.TimeOfDay; //The time
BCL并没有很好地区分日期和时间。
如果你愿意接受一个新的外部依赖,我想插入我的Noda Time库,它可以让你清楚地将事情分为LocalDate
和LocalTime
。要从日期/时间选择器执行转换,您可能会使用:
var dateAndTime = LocalDateTime.FromDateTime(appointmentDateTimeDate.Value);
LocalDate date = dateAndTime.LocalDate;
LocalTime time = dateAndTime.LocalTime;
正如其他人所指出的,DateTime
总是同时包含日期和时间组件。因此,尽管可以使用两个DateTime
单独保存两者,但在大多数情况下,建议将两者一起保存在一个DateTime
实例中。
您应该看看是否真的需要将两个值分开,或者您的应用程序是否可以将两者组合在一个属性中,这将使事情变得更容易。
DateTime值始终包含日期和时间,无论是否同时使用。
您可以使用DateTime的.Date属性来获取"仅日期"。它仍然有一个时间值,但时间值将是午夜。您也可以使用.TimeOfDay属性来获取时间部分,这将是一个TimeSpan,指示自午夜以来的刻度数。
我在这里做了一个飞跃,假设你试图在UI中用一个控件设置日期,用另一个控件设定时间。下面是一些代码的示例,我们使用附加到文本框的Ajax CalendarExtender和自定义TimePicker控件来实现这一点。
DateTime dt;
try
{
dt = Convert.ToDateTime(txtViewDate.Text).AddHours(txtViewTime.Hour).AddMinutes(txtViewTime.Minute);
if (txtViewTime.AmPm == MKB.TimePicker.TimeSelector.AmPmSpec.PM)
{
dt = dt.AddHours(12);
}
System.Diagnostics.Debug.WriteLine(dt.ToString());
}
catch (Exception)
{
// abort processing
return;
}