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

C# 如何设置DateTime小时、分钟和秒?,c#,string,parsing,datetime,seconds,C#,String,Parsing,Datetime,Seconds,我可以设置日期、月份和年份,但我希望将小时、分钟和秒自动设置为一天中的当前时间。例如,如果当前时间是15:24,我希望用户添加日期可以是21/03/2013,然后我希望时间是15:24:00,而不是像当前那样00:00 有什么建议吗?你可以这样做 这是可行的,但看起来有点迂回,考虑到您要从时间格式转换为字符串,然后再转换回时间格式,我不推荐使用它。许多不可变的对象正在创建中 还有其他选项,包括像您那样解析日期,然后向其中添加TimeOfDay closeDate = DateTime.Parse

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

有什么建议吗?

你可以这样做

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

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

closeDate = DateTime.Parse(Console.ReadLine() + " " + DateTime.Now.TimeOfDay);
您可以这样做:

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

您可以使用
DateTime。现在
获取当前时间,然后从中提取并将其添加到现有的
DateTime

closeDate = DateTime.Parse(Console.ReadLine())
    .Add(DateTime.Now - DateTime.Today);
(我显式地使用了
Date
属性,这样即使用户也输入了时间,它也基本上被删除了。)


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

首先,需要使用从命令行读取的内容进行分析

然后,你可以用like来做这件事


那么这个小功能呢:

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

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

将DateTime.Now存储在变量中

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);
}
然后你可以像这样访问小时、分钟和秒:

var date = DateTime.Now;

首先要做的不是嵌套函数。它使代码难以读取、调试和维护。请考虑使用<代码> TyPARSE 以优雅的方式处理错误。作为解析部分的一部分,我不会这样做。您不妨分析一下,然后添加值。我通常希望我的代码具有尽可能少的字符串转换:)@JonSkeet我正在编写一个替代方案,就在我看到您的答案弹出时。=)将您对
.Date
的使用合并到我自己的答案中,我之所以保留这个答案,只是因为我想解释一下您所评论的观点——来回转换字符串。
DateTime closeDate = DateTime.Parse(Console.ReadLine());
closeDate = closeDate.Date + DateTime.Now.TimeOfDay;
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);
}
var date = DateTime.Now;
date.Hour;
date.Minute;
date.Second;