uncategorized

取得該日期之對應週別

取得日期對應週別,這個功能滿有用,主要是可以識別目前日期是整年的第幾週。當然,在某些公司內的週期定義,可能不是所謂的週日到週六為一週,有可能是上周五到下周四為完整一週,這樣去計算週期就會跟一般有所不同

這邊先講一般正常週別的作法,必須用到System.Globalization.Calendar類別。要宣告這個物件跟一般物件不太一樣,它必須透過CultureInfo.Calendar屬性來做宣告,換句話說就是必須定義是屬於哪一個文化的calendar,這邊因為要計算台灣週期,故採用zh-TW,若是要用其他國別就更改zh-TW設定就可以

1
System.Globalization.Calendar TW = new System.Globalization.CultureInfo("zh-TW").Calendar;

然後透過GetWeekOfYear這方法取得今年的週期。這方法主要要傳入日期,週期定義和每週起始星期就可以

1
2
3
4
DateTime dt = DateTime.Now;
System.Globalization.Calendar TW = new System.Globalization.CultureInfo("zh-TW").Calendar;
Response.Write(string.Format("西元:{0}/{1}/{2} <br>", dt.Year, dt.Month, dt.Day));
Response.Write("週別:" + TW.GetWeekOfYear(dt, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString());

在Rule的地方有三種可以設定

  • FirstDay:表示第一週開始為一年第一天
  • FirstFourDayWeek:表示一週開始距離一年第一天有四個之前
    1
    Response.Write("週別:" + TW.GetWeekOfYear(dt, System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Saturday).ToString());

其意思若是以2014/1/2為主,但是一週開始為周六,1/2距離上一個周六,離一年的第一天共間隔四天,故該日期被定義為53週,若是去加兩天變成1/4則週別就會變成第一週,因為距離1/1並無超過四天以上。不過,個人認為這部分使用上並不是很用好,彈性也較低

  • FirstFullWeek:這一個就可以指定是1/1開始為第一週還是指定星期開始為第一週,剛好1/2也是星期四,就會是一年的第一週
    1
    Response.Write("週別:" + TW.GetWeekOfYear(dt, System.Globalization.CalendarWeekRule.FirstFullWeek, DayOfWeek.Thursday).ToString());

若是指定第一週為週五呢?1/2就會被歸屬到上一年度的週別了,簡而言之就是我們的週別定義就會是週五到下週四