幾個關於星期計算的方法(C#)
在使用C#開發軟體時,我們可以使用.NET Framework中的DateTime結構(System名稱空間)來處理日期和時間;但是,在DateTime結構中卻少了一些關於星期的常用計算方法,比如:
- 某一天是當年中的第幾周。
- 某一天是當月中的第幾周。
- 獲取星期幾的中文名稱。
以下就是這三個方法的實現,它們被定義在CDateTime類中:
public class CDateTime
{
// 中文星期名稱
private static string[] arrWeekDayName =
{"星期日","星期一","星期二","星期三",
"星期四","星期五","星期六"};
// 某一天是當年中的第幾周
public static int WeekOfYear(DateTime dt)
{
DateTime firstDay = new DateTime(dt.Year,1,1);
int firstSunday = (7 - (int)firstDay.DayOfWeek) % 7 + 1;
int curDayOfYear = dt.DayOfYear;
if (curDayOfYear < firstSunday)
return 1;
else if (firstSunday == 1)
return (curDayOfYear - firstSunday) / 7 + 1;
else
return (curDayOfYear - firstSunday) / 7 + 2;
}
// 某一天是當月中的第幾周
public static int WeekOfMonth(DateTime dt)
{
DateTime firstDay = new DateTime(dt.Year, dt.Month, 1);
int firstSunday = (7 - (int)firstDay.DayOfWeek) % 7 + 1;
if (dt.Day < firstSunday)
return 1;
else if (firstSunday == 1)
return (dt.Day - firstSunday) / 7 + 1;
else
return (dt.Day - firstSunday) / 7 + 2;
}
// 獲取星期幾的中文名稱
public static string WeekDayName(DateTime dt)
{
int dayOfWeek = (int)dt.DayOfWeek;
return arrWeekDayName[dayOfWeek];
}
}
WeekOfYear()和WeekOfMonth()方法
首先看WeekOfYear()和WeekOfMonth()方法,它們的演算法是基本一樣的。
firstDay變數用於確定當年或當月的第一天。
firstSunday變數用於儲存第一個週日是當年(或當月)的第幾天。
如果指定的日期早於第一個週日,則為第一週;否則通過這個日期與第一個週日相差的天數來計算它位於第幾周。
演算法中的關鍵在DayOfWeek列舉值中,其中,週日值為0,週一到週六的值分別為1到6,我們正是通過這些關鍵資料來計算的。
WeekDayName()方法
WeekDayName()方法實現非常簡單,有很多朋友使用if語句或switch語句來實現這一功能;而這裡,我們使用了一個字串陣列來儲存周幾的名稱,然後,通過DayOfWeek列舉值直接獲取相應的名稱。
這種使用陣列的方法稱為“表驅動法”,其特點是:
- 以空間換時間,比條件語句有著更高的執行效率,特別是對於固定的、會經常呼叫的資料。
- 程式碼便於閱讀和維護,簡單的程式碼會更加直觀。
相關文章
- C# 獲取當前是星期幾的方法C#
- 關於NULL的兩個計算Null
- 關於字串分類抽取的幾個方法字串
- 關於c#多執行緒中的幾個訊號量C#執行緒
- 使用者輸入一個日期,計算時星期幾,並計算時一年中的某一天,使用自定義方法判斷
- 關於vue的使用計算屬性VS使用計算方法的問題Vue
- 關於shutdown的幾個模式模式
- 幾個基本的計算機概念計算機
- 幾個關於雲端計算,想問又不好意思提的問題(一)
- 幾個關於雲端計算,想問又不好意思提的問題(二)
- 計算檔案Checksum的幾種方法
- 計算幾何常用的函式/方法函式
- [併發程式設計]-關於 CAS 的幾個問題程式設計
- 關於js計算非等寬字型寬度的方法JS
- 幾個引數配置的計算公式公式
- 關於singleton的幾個實現
- 關於INLIST ITERATOR的幾個測試
- 關於C#程式優化的五十種方法C#優化
- 計算tableView不等高cell高度的幾種方法View
- php中計算時間差的幾種方法PHP
- 關於Shell 的幾個冷門資料
- 關於執行緒的幾個函式執行緒函式
- 關於ImageView的幾個常見問題View
- 關於解決問題的幾個段位
- 關於大資料的幾個小故事大資料
- 關於redo的幾個小知識點
- 關於字串的幾個有用函式 (轉)字串函式
- 計算機清理病毒幾個技巧計算機
- 關於java獲取本地ip的幾種方法Java
- ls -l --time-style命令檢視檔案是星期幾建立的幾種方法
- sql server 計算兩個時間 相差的 幾天幾時幾分幾秒SQLServer
- 7個關於"this"面試題,你知道幾個?面試題
- javascript關於toFixed的計算規則JavaScript
- Oracle關於week的計算問題Oracle
- 關於日期計算的問題 (轉)
- 一些關於日期的計算
- CG_Hadoop:基於MapReduce的計算幾何Hadoop
- Flink實時計算pv、uv的幾種方法