2011-07-14 266 views
-3

任何人都可以幫助我的格式如下?c#日期/時間格式

if(system.datetime.now > 20:00:00 AND < 23:59:59) 
    NewDateTime = (system.datetime.now + 1 day) + time as 00:01:00 

即如果SYSDATE符合標準,使NewDateTime =系統日期+ 1天,隨着時間00:01:00

感謝

+0

爲什麼選擇caml標籤? –

+0

你根本沒有做任何格式化 - 而且這也不是可以編譯的東西。 – Oded

+0

這只是僞代碼?如果沒有,那麼你的語法全錯了。 'AND'而不是'&&',時間限制等格式不正確。 – ChrisF

回答

5

你不應該處理格式在這裏。我懷疑你想要的東西,如:

TimeSpan earliest = new TimeSpan(20, 0, 0); 
TimeSpan latest = new TimeSpan(23, 59, 59); 
DateTime now = DateTime.Now; 
TimeSpan currentTime = now.TimeOfDay; 

if (currentTime > earliest && currentTime < latest) 
{ 
    DateTime newDateTime = now.Date.AddDays(1).AddHours(1); 
} 

一個重要的這裏的一點是,我只服用DateTime.Now一次,而不是每一個我們感興趣的是「當前時間」的時間。這導致更好的一致性。

我也會質疑你的「最新」的一部分 - 你真的想要在23:59:59.5的行爲是不同的?難道你不是真的的意思是「晚上8點以後的任何時間」?這可能也應該包容性的?這將導致:

// Probably make this a static readonly field 
TimeSpan earliest = new TimeSpan(20, 0, 0); 

DateTime now = DateTime.Now; 
TimeSpan currentTime = now.TimeOfDay; 
if (currentTime >= earliest) 
{ 
    DateTime newDateTime = now.Date.AddDays(1).AddHours(1); 
} 
+0

Bah,在20秒鐘內被Skeet擊敗!代表豬!我也買了你的書;) –

+0

哈哈耶喜歡什麼期望從Skeet? hahaha –

1
DateTime now = DateTime.Now; 
DateTime newDateTime; 
if (now.Hours >= 20) 
{ 
    newDateTime = now.Date.AddDays(1).AddHours(1); 
} 
+0

例如,如果小時爲8:30:00,條件(now.Hours> 8)將工作嗎(它應該返回true)? –

+0

好點,修改爲'now.hours> = 20'。在20:30,'now.Hours'將會是20. –

0

大約這就是我想你想:

CurrentTime=DateTime.Now; 
if(CurrentTime.GetHour()>19) 
{ 
    NewDateTime=CurrentTime.AddDays(1); 
    NewDateTime.SetHour(1); 
    NewDateTime.SetMinute(0); 
    NewDateTime.SetSecond(0); 
} 

我認爲你可以做到這一點 - 如果沒有你可以根據當前時間計算時間

NewDateTime.AddHours(-CurrentTime.Hour-1) 
NewDateTime.AddMinutes(-CurrentTime.Minute); 
0

您的代碼是無效的在很多方面:

if(system.datetime.now > 20:00:00 AND < 23:59:59) 

在C#中,沒有運營商 「之間」,所以你需要兩個比較加上AND

if(system.datetime.now > 20:00:00 AND system.datetime.now < 23:59:59) 

&&(爲or,它是||

if(system.datetime.now > 20:00:00 && system.datetime.now < 23:59:59) 

注即&&||具有短路行爲,即如果&&的左操作數爲false,則右操作數不被評估。與||相同,區別在於如果左側操作數爲true,則不評估右側操作數。

C#沒有時間字面值。現在取決於你想要比較的是什麼。你打算看看是否已經是二十點了嗎?然後做(注意DateTime.Now也包含今天的日期,DateTime.Today是當前一天的開始):

if(system.datetime.now > system.datetime.today.addHours (20) 
    && system.datetime.now < system.datetime.today.addDays (1)) 

C#源代碼是區分大小寫的,所以

if(System.DateTime.Now > System.Datetime.Today.AddHours (20) 
    && System.DateTime.Now < System.DateTime.Today.AddDays (1)) 

你也可以用TimeSpan的工作,它派上用場的時候你也想指定分鐘和秒(假設20:15爲例):

if(System.DateTime.Now > System.Datetime.Today.Add (new TimeSpan(20,15,0)) 
    && System.DateTime.Now < System.DateTime.Today.AddDays (1)) 

我建議使用命名值,雖然:

var tomorrow = System.DateTime.Today.AddDays(1); 
var quincyTime = today.Add (new TimeSpan (20,15,0)); 

if(System.DateTime.Now > quincyTime && System.DateTime.Now < tomorrow) 

而且,這是很重要的,Now給你(大致)當你調用它的那一刻。所以,如果你有Now多次調用,存儲它,所以它不會在你的函數的執行轉換:

var now  = System.DateTime.Now; 
var today  = System.DateTime.Today; 
var quincyTime = today.Add (new TimeSpan (20,15,0)); 
var tomorrow = today.AddDays(1); 

if(now > quincyTime && now < tomorrow) 

的觀察讀者可能會承認,甚至沒有Today如果這個程序在運行核電可能保存午夜的電廠。有治癒:

var now  = System.DateTime.Now; 
var today  = now.Date; 

還要注意,if-body是一個單獨的陳述,例如,

if(now > quincyTime && now < tomorrow) 
    ; // empty statement 

if(now > quincyTime && now < tomorrow) 
    foobar(); 

或者整個 「塊」:

if(now > quincyTime && now < tomorrow) 
{ 
} // empty block 


if(now > quincyTime && now < tomorrow) 
{ 
    foobar(); 
    frob(); 
} 

順便說一句,如果你指的是 「至少」/ 「的最大」 而不是 「以後」/ 「快」,用<=>=

if(now >= quincyTime && now <= tomorrow) {...} 
+0

好的提示謝謝 – DarkW1nter