欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

ESBasic 可復用的.NET類庫(02) -- 日期 Dat

系統(tǒng) 2024 0
1. 緣起:

同我們從 DateTime 中將時刻部分作為 ShortTime 抽離出來一樣,我們將 DateTime 中的日期部分也抽離出來,以 ESBasic.Date 類來表示。

比如,我們的報表系統(tǒng)是以“天”為單位來進行統(tǒng)計的,為了提高效率,我們會在每天凌晨將前一天的報表數據統(tǒng)計完畢,并存儲到數據庫中,一天的報表數據就對應數據庫數據庫中的一條記錄,該記錄以一個表示日期的整數而不是 DateTime 作為主鍵。比如主鍵值為 20090501 的表示這條記錄對應的是 2009 5 1 日的報表數據。

假設我想查詢 2009-05-01 2009-05-07 7 天的報表數據,就沒有必要傳入 2009-05-01 00:00:00 2009-05-07 23:59:59 兩個 DateTime 進去, 而只要傳入兩個 Date 類型的對象即可。

相比于 DateTime ,使用 Date 來表示日期在語義上會更加清晰。

DateTime 的形象示意圖如下:

Year

Month

Day

2. 適用場合:

任何只需要使用年月日來表示日期的場合。

3 .設計思想與實現

Date 的設計與實現都是相當簡單的,其類圖如下:
ESBasic 可復用的.NET類庫(02) -- 日期 Date
Date
實現了 IComparable 泛型接口,表示 Date 對象之間可以相互比較。 Date 所表示的日期的值越大,則 Date 就越大。

Date 提供一個接受 DateTime 類型的參數的構造函數,表示可以直接將一個 DateTime 轉化為一個 Date 對象。

Date 標記為可序列化,表示可以通過 Remoting 進行遠程傳遞 Date 對象。

ToDateInteger 方法用于將日期轉化為一個整數,正如緣起中提到的,對一個表示 2009 5 1 日的 Date 對象調用 ToDateInteger 方法會返回整數 20090501 ,這個整數與示例數據庫中對應記錄的主鍵是相等的。

如果一個 Date 所代表的日期越大,則其 ToDateInteger 方法返回的整數也越大。基于這一點,如果要查詢上述數據庫中的某日期范圍內的報表記錄,直接對主鍵值進行 between…and 的范圍查詢即可。

AddDays 方法表示在現在的日期上加上一定的天數然后返回得到的新日期。如果自己手動來實現這個方法,則要考慮很多例外情況,比如大小月份、閏年的 2 月等等,所以我直接借助現成的 DateTime 來實現這個方法。

另外, Date 類還有幾個靜態(tài)方法: ConvertFromDateInteger 方法的作用剛好與 ToDateInteger 方法相反,用于將一個整數轉化為一個 Date 對象。 ConvertToDateInteger 方法可以更方便地將一個 DateTime 的日期部分直接轉化為一個整數。

4. 使用時的注意事項

(1) Date 所代表的日期是以“一天”為遞增的,是連續(xù)的,但是其 ToDateInteger 方法返回的整數雖然也是遞增的,卻是不連續(xù)的。比如 20090531 20090601 之間就差了 70 。

(2) Date 有一個接受年、月、日三個整數的構造函數,該構造函數我沒有手動去檢測三個參數的合法性,而是借助了 DateTime 來做這件事情,如果三個參數的取值不合理,則會 DateTime 的構造會拋出異常。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public Date( int y, int m, int d)
:
this ( new DateTime(y,m,d)) // 借助DateTime來驗證參數的合法性
{
}

(3) Date 類的 Day 屬性的 set 方法,也是基于同( 2 )一樣的考慮,借助 DateTime 來驗證屬性值的合法性。

5. 擴展

我們可以將表示報表查詢的起始日期的 Date 對象和表示結束日期的 Date 對象組合成一個 ESBasic.DateScope 對象,用于表示要查詢的報表的日期范圍。

如果我們要判斷某個日期是否在 DateScope 指定的日期范圍內,可以調用 DateScope Contains 方法。

DateScope 對象之間很難進行比較大小,但是可以比較是否相等,所以 DateScope 實現了“ == ”操作符和覆蓋的基類的 Equals 方法。


注:ESBasic源碼可到 http://esbasic.codeplex.com/ 下載。
ESBasic討論:37677395
ESBasic開源前言

ESBasic 可復用的.NET類庫(02) -- 日期 Date


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 九九福利影院 | 91美女在线观看 | 中文字幕日韩一区二区 | 久久激情小视频 | 99久久免费视频在线观看 | 欧美一区二区三区中文字幕 | 亚洲精品在线视频 | 欧美视频在线一区二区三区 | 亚洲精品无码不卡在线播放he | 91久久亚洲精品一区二区 | 国产成人一区二区精品非洲 | 久久一区二区三区99 | 毛片在线视频观看 | 九色91 | 男人j进女人j啪啪无遮挡动态 | 一级毛片网| 久久久人成影片一区二区三区 | 99精品久久秒播无毒不卡 | 欧美高清视频一区 | 日韩少妇成熟A片无码专区 黄在线免费观看 | 91久久老司机福利精品网 | 国产日韩欧美亚洲 | 精品专区 | 魏千翔 | 免费在线黄色电影 | 久久视频精品 | 国产成人综合一区二区三区 | 天天操天天玩 | 欧美日韩国产精品一区二区 | 一本色道精品久久一区二区三区 | 一级做a爰片性色毛片中国 日本黄色免费片 | aaa毛片手机在线现看 | 久久国产精品偷 | 亚洲成网| 国产综合亚洲精品一区二 | 青青在线香蕉精品视频免费看 | 亚洲一区在线日韩在线深爱 | 久久99精品久久久久久秒播 | 亚洲日本一区二区三区 | 开心久久网 | 五月婷婷丁香综合网 |