如何设置 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
并将其添加到现有DateTime
的Date
:
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