如何设置 DateTime 小时、分钟和秒?

Posted

技术标签:

【中文标题】如何设置 DateTime 小时、分钟和秒?【英文标题】:How can I setup DateTime hour,minute and second? 【发布时间】:2013-03-19 15:39:18 【问题描述】:
private void StartAuction()

    DateTime closeDate;
    closeDate = DateTime.Parse(Console.ReadLine());

我可以设置日期、月份和年份,但我希望将小时、分钟和秒自动设置为一天中的当前时间。例如,如果当前时间是 15:24,我希望用户添加可能是 21/03/2013 的日期,然后我希望时间是 15:24:00 而不是现在的 00:00:00

有什么建议吗?

【问题讨论】:

首先要做的不是嵌套函数。它使您的代码难以阅读、调试和维护。 考虑使用TryParse 以优雅的方式处理错误。 【参考方案1】:

您可以使用DateTime.Now 获取当前时间,然后从中获取TimeOfDay 并将其添加到现有DateTimeDate

private void StartAuction()

    DateTime closeDate = DateTime.Parse(Console.ReadLine());
    DateTime closeDateAtCurrentTime = closeDate.Date + DateTime.Now.TimeOfDay;
    ...

(我明确使用了Date 属性,因此即使用户确实也输入了时间,它基本上也被删除了。)

作为一个公然的插件,您可能还想考虑使用我的Noda Time 库,它将“日期”、“时间”和“日期/时间”的概念分成不同的类型。 (以及“本地”值与您知道 UTC 偏移量或时区的值。)

【讨论】:

将您对.Date 的使用合并到我自己的答案中,我之所以保留它,只是因为我想解释您评论的要点-来回转换字符串。【参考方案2】:

首先您需要使用DateTime.Parse 解析您从命令行读取的内容。

然后,您可以使用DateTime.Now.TimeOfDay like;

DateTime closeDate = DateTime.Parse(Console.ReadLine());
closeDate = closeDate.Date + DateTime.Now.TimeOfDay;

【讨论】:

【参考方案3】:

可以

closeDate = DateTime.Parse(Console.ReadLine() + " " + DateTime.Now.TimeOfDay);

这可行,但看起来有点迂回,考虑到您将 时间格式转换为字符串,然后再次转换回时间格式,我不推荐它。那里正在创建许多不可变对象。

还有其他选项,包括像您一样解析日期,然后然后添加TimeOfDay

DateTime closeDate;
closeDate = DateTime.Parse(Console.ReadLine());
closeDate = closeDate.Date + Date.Now.TimeOfDay;

【讨论】:

我不会把它作为解析部分的一部分——你不妨解析它然后然后添加值。我通常更喜欢我的代码尽可能少地进行字符串转换:) @JonSkeet 当我看到你的答案弹出时,我正在写一个替代方案。 =)【参考方案4】:

你可以这样做:

closeDate = DateTime.Parse(Console.ReadLine())
    .Add(DateTime.Now - DateTime.Today);

【讨论】:

【参考方案5】:
var now = DateTime.Now;
var date = new DateTime(input.Year, input.Month, input.Day, now.Hour, now.Minute, now.Second);

【讨论】:

【参考方案6】:

那么这个小功能怎么样:

public static DateTime ChangeTime(DateTime dateTime)

    return new DateTime(
        dateTime.Year,
        dateTime.Month,
        dateTime.Day,
        DateTime.Now.Hour,
        DateTime.Now.Minute,
        DateTime.Now.Second,
        DateTime.Now.Millisecond,
        DateTime.Now.Kind);

【讨论】:

【参考方案7】:

这是一个可能的解决方案:

将 DateTime.Now 存储在变量中

var date = DateTime.Now;

然后你可以像这样访问小时、分钟和秒:

date.Hour;
date.Minute;
date.Second;

【讨论】:

以上是关于如何设置 DateTime 小时、分钟和秒?的主要内容,如果未能解决你的问题,请参考以下文章

熊猫时间增量只有小时分钟和秒

如何在 SQL 中将小时、分钟和秒 (HH:mm:ss) 转换为分钟和秒 (mm:ss)

在 ZonedDateTime 或 Instant 中将小时分钟和秒设置为 00

在Kusto中format_datetime()中,将分和秒作为00的日期时间。

如何计算给定日期的剩余天数、小时数、分钟数和秒数?

如何将秒转换为小时、分钟和秒?