簡體   English   中英

跳過周六和周日並從ASP.NET中的當前日期獲取日期?

[英]Skip Sat and Sunday and get the date by from the current date in ASP.NET?

我正在使用以下代碼跳過周六和周日,只獲取特定小時數的工作日,這實際上是我的任務:

我有一個項目和完成該項目的具體時間,現在我只想顯示項目完成的日期。

我的代碼是:

DateTime date = DateTime.Now;
    Int32 d = 1;
    Int32 result = 260 / 8;
    for (d = 0; d <= result; d++)
    {
        if (date.DayOfWeek.ToString() == "Saturday" || date.DayOfWeek.ToString() == "Sunday")
        {
            d = d - 1;
            date = date.AddDays(1);
        }
        else
        {
            date = date.AddDays(1);
        }
    }
    lbldate.Text = date.ToString();

它的正常工作時間為30天(天數為32天,然后日期應為:2013年11月25日,但即將於2013年11月26日)。

請告訴我我在哪里犯錯。

一個可行的解決方案是:

DateTime endDate = DateTime.Now;
double remainingAmountOfWorkingDays = Math.Round(260d / 8d);
while (remainingAmountOfWorkingDays > 0)
  {
    endDate = endDate.AddDays(1);

    if (endDate.DayOfWeek == DayOfWeek.Saturday || endDate.DayOfWeek == DayOfWeek.Sunday)
       continue;

    Console.WriteLine(remainingAmountOfWorkingDays +" "+endDate.ToString("dddd dd.MM.yyyy"));
    remainingAmountOfWorkingDays--;
  }           

也許有一些更優雅的方法,但是它可以工作並且不需要循環:

public static DateTime GetDateIn(int numWorkingHours)
{
    int numDays = numWorkingHours / 8;
    DateTime date = DateTime.Now;
    // normalize to monday
    if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
        date = date.AddDays(date.DayOfWeek == DayOfWeek.Sunday ? 1 : 2); 
    int weeks = numDays / 5;
    int remainder = numDays % 5;
    date = date.AddDays(weeks * 7 + remainder);  
    // normalize to monday
    if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
        date = date.AddDays(date.DayOfWeek == DayOfWeek.Sunday ? 1 : 2);    
    return date;
}

演示版

而不是從d變量中減去

如果是假日星期六或星期日,請使用以下代碼

date.Subtract(new TimeSpan(1, 0, 0, 0)); // where 1 is day count you need to subtract 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM