2011-07-14 231 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