2
private void StartAuction()
{
    DateTime closeDate;
    closeDate = DateTime.Parse(Console.ReadLine());
}

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

有什么建议么?

4

7 回答 7

11

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

private void StartAuction()
{
    DateTime closeDate = DateTime.Parse(Console.ReadLine());
    DateTime closeDateAtCurrentTime = closeDate.Date + DateTime.Now.TimeOfDay;
    ...
}

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

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

于 2013-03-19T15:42:32.193 回答
1

可以

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

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

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

DateTime closeDate;
closeDate = DateTime.Parse(Console.ReadLine());
closeDate = closeDate.Date + Date.Now.TimeOfDay;
于 2013-03-19T15:41:19.487 回答
1

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

然后,您可以使用DateTime.Now.TimeOfDaylike 来做到这一点;

DateTime closeDate = DateTime.Parse(Console.ReadLine());
closeDate = closeDate.Date + DateTime.Now.TimeOfDay;
于 2013-03-19T15:43:32.513 回答
0

你可以这样做:

closeDate = DateTime.Parse(Console.ReadLine())
    .Add(DateTime.Now - DateTime.Today);
于 2013-03-19T15:41:31.767 回答
0
var now = DateTime.Now;
var date = new DateTime(input.Year, input.Month, input.Day, now.Hour, now.Minute, now.Second);
于 2013-03-19T15:43:29.523 回答
0

那么这个小功能怎么样:

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);
}
于 2013-03-19T15:44:22.363 回答
0

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

将 DateTime.Now 存储在变量中

var date = DateTime.Now;

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

date.Hour;
date.Minute;
date.Second;
于 2013-03-19T15:45:39.313 回答