【问题标题】:Customer date start time客户日期开始时间
【发布时间】:2015-09-10 16:46:52
【问题描述】:

当我的应用程序启动时,我有一个日期时间选择器用于开始时间和结束时间。

dvSubmittedDateBegin.Format = DateTimePickerFormat.Custom;
dvSubmittedDateBegin.CustomFormat = "MMM dd yyyy  - hh mm tt";

一切正常。但是,我被要求在早上 5 点开始默认默认设置。

我创建了一个新的日期时间并分配了dvSubmittedDateBegin.Value - dt;

但是我想我必须指定每个 int 的新日期时间?

DateTime dt = new DateTime(2015, 6, 24, 05, 00, 0);

明天 6 月 25 日会发生什么?不知道如何解决这个问题。

【问题讨论】:

    标签: c# datetime datetimepicker


    【解决方案1】:

    您可以使用 AddDays()、AddHours()、AddMinutes() 等方法:

    DateTime dt = DateTime.Today.AddHours(5);
    

    【讨论】:

    • 现在这里是上午 9 点,因此将时间设置为下午 2 点。 datetimepicker 中的默认时间需要始终为凌晨 5 点,当然如果他们想要不同的时间,他们可以自己更改。
    • 我在您评论时编辑了代码,抱歉。它必须是 DateTime.Today(在午夜)而不是 DateTime.Now。
    【解决方案2】:

    喜欢怎么样;

    DateTime dt = DateTime.Today + TimeSpan.FromHours(5);
    

    或者更简单

    DateTime dt = DateTime.Today.AddHours(5);
    

    您将使用DateTime.Today 获得从午夜开始的当前日期,并将5 小时添加到它,它将是当天的凌晨 5 点。

    【讨论】:

    • Soner,使用 DateTime dt = DateTime.Today.AddHours(5);
    • 旁白:这可行,但只是偶然的糟糕的 API。正如我们所知,.Today 返回一个DateTime,时间显式设置为00:00,所以这会起作用,但是阅读代码,人们会认为我们总是移动了 5 个小时。这不一定是真的,因为由于夏令时转换,有些日子已经跳过或重复了时间。换句话说,即使你打电话给AddHours(5),到5:00点真的可能已经过去了4个小时或6个小时。
    • @MattJohnson 你说得对。夏令时是本案的关键问题。即使我们在添加 AddHours(5) 值之前检查 TimeZoneInfoIsDaylightSavingTime 方法,这也不能解决所有问题,因为如果当前时区不支持 DST,对吧?
    【解决方案3】:

    您可以创建一个返回特定日期的函数,您可以在其中传递所有组件并将时间组件定义为默认参数:

    DateTime CreateDateWith5amStart(int year, int month, int day, int hour = 5, int minute = 0, int second = 0) 
    {
        return new DateTime(year, month, day, hour, minute, second) 
    }
    

    如果他们只提供日期组件,则将时间设置为凌晨 5 点。如果他们需要不同的时间,他们可以提供时间组件。

    【讨论】:

    • 真的,不需要这样的方法,因为它将被处理它的属性和/或方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    相关资源
    最近更新 更多