2014-10-08 141 views
0

作为一个项目的一部分,我试图创建一个日历在Asp.net纯粹从代码隐藏与C# 我使用中继器和填充内容从codebehind这是工作正常。我可以使用Datetime获取今天的日期月份等。Asp.net日历 - 生成日期

但是,当我试图计算一周中前几天和下一天的日期时,代码变得非常混乱,我想知道是否有更好的方法去做吧。

目前这是我如何生成特定日子的日期。

if (today == "Monday" || today.Equals("Monday")) 
      { 
      switch (days) 
       { 
        case "0": 
         return DateTime.Today.AddDays(0).ToString("dd"); 
        case "1": 
         return DateTime.Today.AddDays(1).ToString("dd"); 
        case "2": 
         return DateTime.Today.AddDays(2).ToString("dd"); 
        case "3": 
         return DateTime.Today.AddDays(3).ToString("dd"); 
        case "4": 
         return DateTime.Today.AddDays(4).ToString("dd"); 
        case "5": 
         return DateTime.Today.AddDays(5).ToString("dd"); 
        case "6": 
         return DateTime.Today.AddDays(6).ToString("dd"); 
        default: 
         return "error"; 
       } 
      } 

然后周二

else if (today == "Tuesday" || today.Equals("Tuesday")) 
      { 
       switch (days) 
       { 
        case "0": 
         return DateTime.Today.AddDays(-1).ToString("dd"); 
        case "1": 
         return DateTime.Today.AddDays(0).ToString("dd"); 
        case "2": 
         return DateTime.Today.AddDays(1).ToString("dd"); 
        case "3": 
         return DateTime.Today.AddDays(2).ToString("dd"); 
        case "4": 
         return DateTime.Today.AddDays(3).ToString("dd"); 
        case "5": 
         return DateTime.Today.AddDays(4).ToString("dd"); 
        case "6": 
         return DateTime.Today.AddDays(5).ToString("dd"); 
        default: 
         return "error"; 
       } 
      } 

所以在周二的例子中,“0”时是周一,因此,如果它是星期二,我减去1日,从当前日期获取日期前一天。代码工作得很好,但我忍不住要想一定有更好的办法

而且我必须为每周的每一天创建这段代码,唯一真正改变的是“ AddDays()“

也注意到了开关的原因,就是所有if语句都在for循环中调用,因此在开关中出现了奇怪的情况。

如果有人比我更聪明有一个更简单的方法来完成这个请随时让我知道。

  • 最好的问候Andreas Hald。

回答

0

我并不十分了解的日子变量的含义,但我认为是要后退或前进 你可以简单地使用下面的代码的天数:

return DateTime.Today.AddDays(days + todayDateTime.DayOfWeek).ToString("dd"); 

然后,您可以使用“天”变量控制下一天和前一天,即1或-1。 它有道理吗?

+0

这将是正确的是,对不起,如果我没有足够的澄清。 days变量只是for循环中的计数器变量,我没有包括,交换机中的不同情况不是需要向前或向后移动的天数,而是表示需要日期的那一天。我现在意识到它可能被愚蠢地命名为 – 2014-10-08 10:17:52

+0

因此,在这种情况下,您可以将我的代码更改为:days +(DayOfWeek.Monday - todayDateTime.DayOfWeek)//如果天数= 0且星期一todayDateTime.DayOfWeek - > 1返回0 + 1-1 = 0 天+(DayOfWeek.Monday - todayDateTime.DayOfWeek)//在天数= 1和星期一todayDateTime.DayOfWeek - > 1的情况下返回1 + 1-1 = 1 days +(DayOfWeek .Monday - todayDateTime.DayOfWeek)//如果天数= 0且星期二todayDateTime.DayOfWeek - > 2返回0 + 1-2 = -1 天+(DayOfWeek.Monday - todayDateTime.DayOfWeek)//在天数= 1,星期二todayDateTime.DayOfWeek - > 2,返回1 + 1-2 = 0 – Bonomi 2014-10-08 10:38:05