2009-10-25 123 views
2

我必须在.NET项目中处理日期和时间,我需要做的事情之一是获取当前日期并在其上添加2周,并且如果用户输入的日期是在这两个星期后抛出一个错误。或者,如果他们输入的日期在当前日期之前,则抛出另一个错误。.NET中的时间戳

现在,我知道如何做到这一点,但没有.NET似乎处理日期的方式。过去我只使用过时间戳(可能是因为我过去所做的每件事都在Unix上),而.NET似乎没有处理日期或时间的时间戳方式。

任何人都可以告诉我如何去做这件事吗?

谢谢。

+0

你的意思是在.NET中的SQL时间戳的相同呢? – Tarik 2009-10-25 21:35:22

+0

你的问题有点含糊。你想知道如何使用'DateTime'类,或者如何使用Unix时间戳?或者完全不同的东西? – mgbowen 2009-10-25 21:36:03

+0

问题很明显,如何验证用户输入是在14天窗口内。 – 2009-10-25 21:41:22

回答

1

.NET中有DateTime类,但我并不真正了解您的意思,“.NET没有处理日期的时间戳方式”。你的意思是生成或使用Unix时间戳的方法吗?

到UNIX时间戳转换为DateTime,你可以这样做:

DateTime epoch = new DateTime(1970, 1, 1); 
epoch = epoch.AddSeconds(timestamp); 

要增加两个星期,你会使用AddDays方法。

0
var userInputDate = DateTime.Parse(someInput); 

if(userInputDate > DateTime.Now.AddDays(14)) throw new ApplicationException("Dont like dates after 2 weeks of today"); 
if(userInputDate < DateTime.Now) throw new ApplicationException("Date shouldnt be before now, for some reason"); 
1
  // Whatever class is able to retrieve the date the user just entered 
      DateTime userDateTime = Whatever.GetUserDateTime(); 
      if (userDateTime > DateTime.Now.AddDays(14)) 
       throw new Exception("The date cannot be after two weeks from now"); 
      else if (userDateTime < DateTime.Now) 
       throw new Exception("The date cannot be before now"); 
4
DateTime value = ...your code... 
DateTime today = DateTime.Today, max = today.AddDays(14); 
if(value < today || value > max) { 
    throw new ArgumentOutOfRangeException("value"); 
} 

一个关键点:只能访问Now/Today一次在相关检查 - 否则,你可以得到的只是在午夜钟声敲响的一些非常奇特的效果。一个极端的边缘情况下,也许...

1

为什么不直接使用

if (objUserDate.Date > DateTime.Today.AddDays(14)) 
{ 
    //Error 1 
} 
else if (objUserDate.Date < DateTime.Today) 
{ 
    //Error 2 
} 
+0

+1使用DateTime.Today。如果一天中的时间不相关,则不应将其包含在计算中。 – Joren 2009-10-25 21:47:23

0

我可能会是这样的:

DateTime twoWeeksFromNow = DateTime.Now.AddDays(14); 

if(enteredDateTime > twoWeeksFromNow) 
{ 
    throw "ERROR!!!"; 
}