幾個關於星期計算的方法(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#執行緒
- 計算檔案Checksum的幾種方法
- [併發程式設計]-關於 CAS 的幾個問題程式設計
- 關於js計算非等寬字型寬度的方法JS
- Flink實時計算pv、uv的幾種方法
- Java Thread 類相關的幾個核心方法Javathread
- 2.5天完成1年的MD計算?DeepMind團隊基於歐幾里得Transformer的新計算方法ORM
- 關於Shell 的幾個冷門資料
- 關於ImageView的幾個常見問題View
- 關於執行緒的幾個函式執行緒函式
- 關於解決問題的幾個段位
- sql server 計算兩個時間 相差的 幾天幾時幾分幾秒SQLServer
- javascript關於toFixed的計算規則JavaScript
- 關於python單例的常用幾種實現方法Python單例
- 關於 Gradle 依賴庫的幾個東西Gradle
- C#拼接Json串的幾種方法C#JSON
- 關於快取命中率的幾個關鍵問題!快取
- 7個關於"this"面試題,你知道幾個?面試題
- 計算幾何 —— 二維幾何基礎 —— 距離度量方法
- UIView中與AutoLayout相關的幾個方法對比UIView
- 關於ORACLE大型事務回滾的幾個點Oracle
- (重要)關於效能的幾個主要動態檢視
- [20190821]關於CPU成本計算.txt
- 關於AI、關於chatGPT的幾十種用法AIChatGPT
- 計算幾何
- c#計算器C#
- Python獲取星期幾Python
- 關於分散式計算的一些概念分散式
- 關於計算機網路的 Wireshark 實驗計算機網路
- matchTemplate函式各個方法的計算公式函式公式
- 關於MQ的幾件小事(七)如果讓你設計一個MQ,你怎麼設計MQ
- 神奇的周幾計算器
- C#獲取日期的星期名稱C#
- JS 總結之關於 this 應該知道的幾個點JS
- 關於LCA的幾點想法
- css幾個居中的方法CSS
- 關於PHP精確計算模組PHP
- 我花了一個星期,做出了公司的管理系統,只需幾個步驟!
- [Leetcode]315.計算右側小於當前元素的個數 (6種方法)LeetCode