2013-03-19 2 views
2
private void StartAuction() 
{ 
    DateTime closeDate; 
    closeDate = DateTime.Parse(Console.ReadLine()); 
} 

Я могу установить дату, месяц и год, но я хочу, чтобы часы, минуты и секунды автоматически настраивались на текущее время суток. например, если текущее время равно 15:24, я хочу, чтобы пользователь добавил дату, которая может быть 21/03/2013, а затем я хочу, чтобы время было 15:24:00, а не 00:00:00, как и в настоящее время.Как настроить DateTime час, минуту и ​​секунду?

Любые предложения?

+0

Первое, что нужно сделать, это не функции гнезда. Это делает ваш код трудным для чтения, отладки и обслуживания. –

+0

Рассмотрите возможность использования 'TryParse' для обработки ошибок изящным образом. –

ответ

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 библиотеки, которая выделяющая идеи «даты», «времени» и «дата/time "в разные типы. (Так же, как «местные» ценности против тех, где вы знаете UTC смещение или часовой пояс.)

+0

выглядит лучше !!! –

+0

Включил ваше использование '.Date' в свой собственный ответ, который я поддерживаю просто за то, что я хотел объяснить, о чем вы прокомментировали, - преобразование строк взад и вперед. –

1

Вы могли сделать

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

Который работает, но выглядит немного окольный, и я бы не рекомендовал его рассмотрении вы конвертируете из формат времени в строку, а затем обратно формат времени снова. Там создано множество неизменяемых объектов.

Есть и другие варианты, в том числе, чтобы разобрать дату, как и вы, и , затем добавить TimeOfDay.

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

Я бы не сделал это как часть парсинга - вы могли бы также проанализировать его и * затем * добавить значение. Обычно я предпочитаю, чтобы мой код имел как можно меньше преобразований строк :) –

+0

@JonSkeet Я писал альтернативу, как только увидел, что ваш ответ всплывает. =) –

0

Вы можете сделать это:

closeDate = DateTime.Parse(Console.ReadLine()) 
    .Add(DateTime.Now - DateTime.Today); 
0
var now = DateTime.Now; 
var date = new DateTime(input.Year, input.Month, input.Day, now.Hour, now.Minute, now.Second); 
1

Сначала нужно разобрать с DateTime.Parse то, что вы читаете из командной строки.

Тогда вы можете сделать это, используя DateTime.Now.TimeOfDay like;

DateTime closeDate = DateTime.Parse(Console.ReadLine()); 
closeDate = closeDate.Date + DateTime.Now.TimeOfDay; 
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); 
} 
0

Это возможное решение:

магазин DateTime.Now в переменной

var date = DateTime.Now; 

Тогда и может получить доступ к Часы, минуты и секунды:

date.Hour; 
date.Minute; 
date.Second; 
Смежные вопросы