Swift-日歷相關(guān)02

一,日歷中ordinality()方法使用:

  • 1链峭,計算本月第n周畦娄,本月第n天,本周第n天
  • 2,計算本年的第n周熙卡,本年的第n天
  • 3杖刷,計算本月的天數(shù)取值范圍,本年的月數(shù)取值范圍是驳癌,本年中天的取值范圍滑燃,本年中周的取值范圍,本月中周的取值范圍等
fileprivate func getInfoOfCalendar(){

    let calendar = Calendar.current

    let dateStr = "2017年04月15日 00時00分00秒 +0800"http://我這里其實日期定的還是同時代
    let dateFormatter = DateFormatter.init()
    dateFormatter.dateFormat = "yyyy年MM月dd日 HH時mm分ss秒 Z"
    let date = dateFormatter.date(from: dateStr)

    //計算本月第n周
    let weekOfMonth = calendar.ordinality(of: .weekOfMonth, in: .month, for: date!)
    print("本月第\(weekOfMonth!)周")
    //計算本月第n天
    let dayOfMonth = calendar.ordinality(of: .day, in: .month, for: date!)
    print("本月第\(dayOfMonth!)天")
    //計算本周第n天
    let day = calendar.ordinality(of: .day, in: .weekOfMonth, for: date!)
    print("本周第\(day!)天")

    //計算本年的第n周
    let weekOfYear = calendar.ordinality(of: .weekOfYear, in: .year, for: date!)
    print("本年第\(weekOfYear!)周")
    //計算本年的第n天
    let dayOfYear = calendar.ordinality(of: .day, in: .year, for: date!)
    print("本年第\(dayOfYear!)天")

    //計算本月的天數(shù)取值范圍
    let rangeOfDayInMonth = calendar.range(of: .day, in: .month, for: date!)
    print("本月的天數(shù)取值范圍是\(rangeOfDayInMonth!)")
    //計算本年的月數(shù)取值范圍是
    let rangeOfMonthInYear = calendar.range(of: .month, in: .year, for: date!)
    print("本年的月數(shù)取值范圍是\(rangeOfMonthInYear!)")
    //計算本年中天的取值范圍:只能是0-31中的一個值
    let rangeOfDayInYear = calendar.range(of: .day, in: .year, for: date!)
    print("本年的天數(shù)取值范圍是\(rangeOfDayInYear!)")
    //計算本年中周的取值范圍
    let rangeOfWeekInYear = calendar.range(of: .weekOfYear, in: .year, for: date!)
    print("本年的周數(shù)取值范圍是\(rangeOfWeekInYear!)")
    //計算本月中周的取值范圍
    let rangeOfWeekIMonth = calendar.range(of: .weekOfMonth, in: .month, for: date!)
    print("本月的周數(shù)取值范圍是\(rangeOfWeekIMonth!)")
}

二颓鲜,方法使用詳解:

以下內(nèi)容參考原文 原文鏈接

let calendar:NSCalendar = NSCalendar.currentCalendar()

1)獲取一個小的單位在一個大的單位里面的序數(shù)

    let count = calendar.ordinalityOfUnit(NSCalendarUnit.Weekday, inUnit: NSCalendarUnit.WeekOfMonth, forDate: NSDate())

    public func ordinalityOfUnit(smaller: NSCalendarUnit, inUnit larger: NSCalendarUnit, forDate date: NSDate) -> Int

    NSCalendarUnit包含的值有:

        Era               -- 紀元單位表窘。對于 NSGregorianCalendar (公歷)來說,只有公元前(BC)和公元(AD)甜滨;而對于其它歷法可能有很多乐严,
                             例如日本和歷是以每一代君王統(tǒng)治來做計算。
        Year              -- 年單位衣摩。值很大昂验,相當于經(jīng)歷了多少年,未來多少年昭娩。
        Month             -- 月單位凛篙。范圍為1-12
        Day               -- 天單位。范圍為1-31
        Hour              -- 小時單位栏渺。范圍為0-24
        Minute            -- 分鐘單位呛梆。范圍為0-60
        Second            -- 秒單位。范圍為0-60
        Weekday           -- 星期單位磕诊,每周的7天填物。范圍為1-7
        WeekdayOrdinal    -- 沒完全搞清楚

        Quarter           -- 幾刻鐘,也就是15分鐘霎终。范圍為1-4
        WeekOfMonth       -- 月包含的周數(shù)滞磺。最多為6個周
        WeekOfYear        -- 年包含的周數(shù)。最多為53個周
        YearForWeekOfYear -- 沒完全搞清楚
        Nanosecond        -- 微妙
        Calendar          --
        TimeZone          -- 沒完全搞清楚

    <1>莱褒、當小單位為 NSCalendarUnitWeekday击困,大單位為 NSCalendarUnitWeekOfMonth / NSCalendarUnitWeekOfYear 時
         (即某個日期在這一周是第幾天),根據(jù) firstWeekday 屬性不同广凸,返回的結(jié)果也不同阅茶。具體說明如下:

        當 firstWeekday 被指定為星期天(即 = 1)時,它返回的值與星期幾對應(yīng)的數(shù)值保持一致谅海。比如:
            fromDate 傳入的參數(shù)是星期日脸哀,則函數(shù)返回 1
            fromDate 傳入的參數(shù)是星期一,則函數(shù)返回 2
        當 firstWeekday 被指定為其它值時(即 <> 1)時扭吁,假設(shè)firstWeekday 被指定為星期一(即 = 2)撞蜂,那么:
            fromDate 傳入的參數(shù)是星期一盲镶,則函數(shù)返回 1
            fromDate 傳入的參數(shù)是星期二,則函數(shù)返回 2
            fromDate 傳入的參數(shù)是星期日蝌诡,則函數(shù)返回 7

    <2>溉贿、當小單位為 參數(shù)為 NSCalendarUnitWeekOfMonth / NSCalendarUnitWeekOfYear,大單位為 NSCalendarUnitYear 時
         (即某個日期在這一年中是第幾周)送漠,minimumDaysInFirstWeek 屬性影響它的返回值顽照。具體說明如下:

            2005年1月
            日   一    二   三   四    五   六
            --------------------------------
                                          1
            2    3    4    5    6    7    8
            9    10   11   12   13   14   15
            16   17   18   19   20   21   22
            23   24   25   26   27   28   29
            30   31

            2005年1月第一周包括1號。
            a. 如果將 minimumDaysInFirstWeek 設(shè)定 = 1
            則 fromDate 傳入1月1號闽寡,方法均返回1  ==> 滿足 minimumDaysInFirstWeek 指定的天數(shù)(最少1天),所以方法將其歸為
                                                  2005年的第1周
            則 fromDate 傳入1月2-8號尼酿,方法均返回2
            則 fromDate 傳入1月9-15號爷狈,方法均返回3
            ......

            b. 如果將 minimumDaysInFirstWeek 設(shè)定為 > 1,比如2
            則 fromDate 傳入1月1號裳擎,方法均返回53  ==> 不足2天涎永,所以方法將其歸為2004年的第53周
            則 fromDate 傳入1月2-8號,方法均返回1
            則 fromDate 傳入1月9-15號鹿响,方法均返回2
            ......

            2008年1月
            日   一    二   三   四    五   六
            ---------------------------------
                      1    2    3    4    5
            6    7    8    9    10   11   12
            13   14   15   16   17   18   19
            20   21   22   23   24   25   26
            27   28   29   30   31

            2005年1月第一周包括1-5號共5天羡微。
            a. 如果將 minimumDaysInFirstWeek 設(shè)定為 <= 5時
            則 fromDate 傳入1月1-5號,方法均返回1  ==> 滿足 minimumDaysInFirstWeek 指定的天數(shù)惶我,所以方法將其歸為
                                                    2008年的第1周
            則 fromDate 傳入1月6-12號妈倔,方法均返回2
            則 fromDate 傳入1月13-19號,方法均返回3
            ......

            b. 如果將 minimumDaysInFirstWeek 設(shè)定為 > 5绸贡,比如6
            則 fromDate 傳入1月1-5號盯蝴,方法均返回53  ==> 當周不足6天,所以方法將其歸為2007年的第53周
            則 fromDate 傳入1月2-8號听怕,方法均返回1
            則 fromDate 傳入1月9-15號捧挺,方法均返回2
            ......

    <3>、當小單位為 參數(shù)為 NSCalendarUnitWeekOfMonth / NSCalendarUnitWeekOfYear尿瞭,大單位為 NSCalendarUnitMonth 時
         (即某個日期在這一個月中是第幾周)闽烙,minimumDaysInFirstWeek 屬性影響它的返回值。具體說明如下:

            2008年4月
            日   一    二   三   四    五   六
            ---------------------------------
                      1    2    3    4    5
            6    7    8    9    10   11   12
            13   14   15   16   17   18   19
            20   21   22   23   24   25   26
            27   28   29   30

            2008年4月第一周包括1声搁、2黑竞、3、4酥艳、5號摊溶。
            a. 如果將 minimumDaysInFirstWeek 設(shè)定為小于或等于5的數(shù)
            則 fromDate 傳入4月1-5號,方法均返回1
            則 fromDate 傳入4月6-12號充石,方法均返回2
            則 fromDate 傳入4月13-19號莫换,方法均返回3
            ....

            b. 如果將 minimumDaysInFirstWeek 設(shè)定為大于5的數(shù)
            則 fromDate 傳入1-5號霞玄,方法均返回0
            則 fromDate 傳入6-12號,方法均返回1
            則 fromDate 傳入13-19號拉岁,方法均返回2
            ....

2)獲取一個小的單位在一個大的單位里面的取值范圍

    let range = calendar.rangeOfUnit(NSCalendarUnit.Day, inUnit: NSCalendarUnit.Month, forDate: NSDate())

    public func rangeOfUnit(smaller: NSCalendarUnit, inUnit larger: NSCalendarUnit, forDate date: NSDate) -> NSRange

    調(diào)用這個方法要明確一點坷剧,取得的是"范圍"而不是"包含",下面是一些例子:

    <1>喊暖、小單位是 NSCalendarUnitDay惫企,大單位是 NSCalendarUnitYear,并不是要取這一年包含多少天陵叽,而是要取"天"(Day)這個單位
         在這一年(Year)的取值范圍狞尔。其實不管你提供的日期是多少,返回的值都是"1--31"巩掺。

    <2>偏序、小單位是 NSCalendarUnitDay,大單位是 NSCalendarUnitMonth胖替。要取得參數(shù)時間點所對應(yīng)的月份下研儒,"天"(Day)的取值范圍。
         根據(jù)參數(shù)時間的月份不同独令,值也不同端朵。例如2月是1--28、3月是1--31燃箭、4月是1--30冲呢。

    <3>、小單位是 NSCalendarUnitWeekOfMonth / NSCalendarUnitWeekOfYear遍膜,大單位是 NSCalendarUnitMonth碗硬。要取得參數(shù)時間點
         所對應(yīng)的月份下,"周"(Week)的取值范圍瓢颅。需要注意的是結(jié)果會受到 minimumDaysInFirstWeek 屬性的影響恩尾。在默認
         minimumDaysInFirstWeek 情況下,取得的范圍值一般是"1--5"挽懦,從日歷上可以看出來這個月包含5排翰意,即5個周。

    <4>信柿、小單位是 NSCalendarUnitDay冀偶,大單位是 NSCalendarUnitWeekOfMonth / NSCalendarUnitWeekOfYear。要取得周所包含
         的"天"(Day)的取值范圍渔嚷。下面是一個示例日歷圖:

            2013年4月
            日   一    二   三   四    五   六
            ---------------------------------
                 1    2    3    4    5    6
            7    8    9    10   11   12  13
            14   15   16   17   18   19  20
            21   22   23   24   25   26  27
            28   29   30

            在上圖的日期條件下进鸠,假如提供的參數(shù)是4月1日--4月6日,那么對應(yīng)的 week 就是1(第一個周)形病,可以看到第一個周包含有6天客年,
        從1號開始霞幅,那么最終得到的范圍值為1--6。

        假如提供的參數(shù)是4月18日量瓜,那么對應(yīng)的 week 是3(第三個周)司恳,第三個周包含有7天,從14號開始绍傲,那么最終得到的范圍值是14--7扔傅。

        假如提供的參數(shù)是4月30日,那么對應(yīng)的 week 是5(第五個周)烫饼,第五個周只包含3天猎塞,從28號開始,那么最終得到的范圍值是28--3杠纵。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邢享,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子淡诗,更是在濱河造成了極大的恐慌,老刑警劉巖伊履,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件韩容,死亡現(xiàn)場離奇詭異,居然都是意外死亡唐瀑,警方通過查閱死者的電腦和手機群凶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哄辣,“玉大人请梢,你說我怎么就攤上這事×λ耄” “怎么了毅弧?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長当窗。 經(jīng)常有香客問我够坐,道長,這世上最難降的妖魔是什么崖面? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任元咙,我火速辦了婚禮,結(jié)果婚禮上巫员,老公的妹妹穿的比我還像新娘庶香。我一直安慰自己,他們只是感情好简识,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布赶掖。 她就那樣靜靜地躺著感猛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪倘零。 梳的紋絲不亂的頭發(fā)上唱遭,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天,我揣著相機與錄音呈驶,去河邊找鬼拷泽。 笑死,一個胖子當著我的面吹牛袖瞻,可吹牛的內(nèi)容都是我干的司致。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼聋迎,長吁一口氣:“原來是場噩夢啊……” “哼脂矫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起霉晕,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤庭再,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后牺堰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拄轻,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年伟葫,在試婚紗的時候發(fā)現(xiàn)自己被綠了恨搓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡筏养,死狀恐怖斧抱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情渐溶,我是刑警寧澤辉浦,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站掌猛,受9級特大地震影響盏浙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荔茬,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一废膘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧慕蔚,春花似錦丐黄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽艰争。三九已至,卻和暖如春桂对,著一層夾襖步出監(jiān)牢的瞬間甩卓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工蕉斜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逾柿,地道東北人。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓宅此,卻偏偏與公主長得像机错,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子父腕,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 說出來讓人笑話弱匪,我看著奧運會上國旗冉冉升起,運動健兒奮勇拼搏璧亮,那一時刻對著電視機屏幕會熱淚盈眶萧诫。很多人是看比...
    迷糊貓的清醒閱讀 154評論 0 0
  • 說說我的母親 靜子 說起來有點讓人費解,我以我的母親為學習的標桿枝嘶。 母親出生于上世紀三十年代财搁。一個七老八十的人,以...
    我是你們的靜子閱讀 841評論 1 2
  • 一個傍晚躬络,清清的風,暖暖的人搭儒。
    不訴衷腸閱讀 188評論 2 1