取DateTime值并只接受时间,反之亦然

本文关键字:时间 反之亦然 DateTime | 更新日期: 2023-09-27 18:29:40

我目前正在开发一个应用程序来作为待办事项列表,我想知道如何接受日期-时间框中的值,但只使用日期值或时间值。我现在是这样做的。

DateTime ted = appointmentDateTimeDate.Value; //The date
DateTime at = appointmentDateTimeTime.Value;  //The time

我应该换一种方式吗?

取DateTime值并只接受时间,反之亦然

使用DateTime.Date属性表示日期,使用DateTime.TimeOfDay属性表示时间:

DateTime ted = appointmentDateTimeDate.Date; //The date
TimeSpan at = appointmentDateTimeTime.TimeOfDay;  //The time

BCL并没有很好地区分日期和时间。

如果你愿意接受一个新的外部依赖,我想插入我的Noda Time库,它可以让你清楚地将事情分为LocalDateLocalTime。要从日期/时间选择器执行转换,您可能会使用:

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;
    }