2013-03-19 46 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

首先要做的不是嵌套函數。它使你的代碼難以閱讀,調試和維護。 – 2013-03-19 15:40:47

+0

考慮使用'TryParse'以優雅的方式處理錯誤。 – 2013-03-19 15:43:43

回答

11

那麼你可以使用DateTime.Now來獲取當前時間,然後從拿TimeOfDay並將其添加到您現有的DateTimeDate

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

(我明確使用Date屬性,以便即使用戶確實輸入時間爲好,它基本上剝離。)

這樣明目張膽的插件,您可能還需要考慮使用我的​​庫,其分離出「日期」,「時間」和「日期的想法/時間「分成不同的類型。 (除了「本地」值VS的人,你知道UTC偏移量或時區。)

+0

看起來更好! – 2013-03-19 15:43:29

+0

在我自己的答案中使用了'.Date',我只是爲了解釋你所說的觀點 - 來回轉換字符串。 – 2013-03-19 15:53:33

1

可以

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

其中一期工程,但它看起來有點迂迴,我不會推薦它考慮你從時間格式轉換爲一個字符串,然後回一個時間格式。許多不可變對象正在創建中。

還有其他選項,包括解析日期,和你一樣,然後然後加上TimeOfDay它。

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

我不會將其作爲解析部分的一部分 - 您可能還會解析它並*然後*添加該值。我通常更喜歡我的代碼儘可能少地進行字符串轉換:) – 2013-03-19 15:44:59

+0

@JonSkeet當我看到您的答案彈出時,我正在寫出一個替代方案。 =) – 2013-03-19 15:45:36

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這樣做;

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; 
相關問題