Swift開發(fā)技巧:NSDate(格式轉換摹迷、封裝、單例)

幾乎每一個app都會有時間顯示這一功能郊供,但這一功能相對于其他的功能邏輯來說只是九牛一毛峡碉。那如何高效的搞定這一不重要但又必須實現(xiàn)的功能,是你提升逼格的一個基礎點驮审。提高逼格鲫寄,從下面內容開始:
思路
  • 創(chuàng)建一個世界管理類:DateFormatter
  • 給這個類實現(xiàn)一個單例:sharedFormatter
  • 給這個類添加對應時間格式類的屬性:NSDateFormatter()
  • 初始化這些格式屬性
  • 調用
干活
  • 第 1 步:創(chuàng)建一個世界管理類:DateFormatter

       
       class DateFormatter {}
       
    
  • 第 2 步:給這個類實現(xiàn)一個單例:sharedFormatter

        
        class DateFormatter {
            // 做成單例
            static let sharedFormatter = DateFormatter()
        }
        
    
  • 第 3 步:給這個類添加對應時間格式類的屬性:NSDateFormatter()

        
        // 第一步
        class DateFormatter { 
            // 第二步 做成單例
            static let sharedFormatter = DateFormatter()
            
            // 第三步 時間格式屬性:NSDateFormatter 類型
            
            let rfc3339 = NSDateFormatter() // 最全時間格式 ("yyyy-MM-dd'T'HH:mm:ssZZZZZ")
            let completeDatetime = NSDateFormatter() // 年-月-日 周 時:分:秒("yyyy-MM-dd (EEE) HH:mm")
    
            let timeZH = NSDateFormatter() // 中式: 月 日 時 分 上下午("MMMd日 HH:mm a")
            let timeEN = NSDateFormatter() // 英式:周 月 日,時 分 上下午("EEE, MMM dd, HH:mm a")
            
            let timeDate = NSDateFormatter()   // 年-月-日("yyyy-MM-dd")
            let timeHour = NSDateFormatter()   // HH:mm("HH:mm")
            let timeMinute = NSDateFormatter() // HH:mm:ss("HH:mm:ss")
        }
        
    
  • 第 4 步:初始化這些格式屬性

        
        // 第一步
        class DateFormatter { 
            // 第二步 做成單例
            static let sharedFormatter = DateFormatter()
            
            // 第三步 時間格式屬性:NSDateFormatter 類型
            
            let rfc3339 = NSDateFormatter() // 最全時間格式 ("yyyy-MM-dd'T'HH:mm:ssZZZZZ")
            let time = NSDateFormatter() // 年-月-日 周 時:分:秒("yyyy-MM-dd (EEE) HH:mm")
       
            let timeZH = NSDateFormatter() // 中式: 月 日 時 分 上下午("MMMd日 HH:mm a")
            let timeEN = NSDateFormatter() // 英式:周 月 日疯淫,時 分 上下午("EEE, MMM dd, HH:mm a")
            
            let timeDate = NSDateFormatter()   // 年-月-日("yyyy-MM-dd")
            let timeHour = NSDateFormatter()   // HH:mm("HH:mm")
            let timeMinute = NSDateFormatter() // HH:mm:ss("HH:mm:ss")
            
            // 第四步 初始化
            init() {
                
                rfc3339.locale     = NSLocale(localeIdentifier: "en_US_POSIX")  // 時間本地化
                rfc3339.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"               // 格式
                rfc3339.timeZone   = NSTimeZone(forSecondsFromGMT: 0)           // 時區(qū)
                
                // 不設置時間本地化地来,默認是手機系統(tǒng)的時間顯示
                time.dateFormat = "yyyy-MM-dd (EEE) HH:mm"
                
                timeZH.locale     = NSLocale(localeIdentifier: "zh_CN")
                timeZH.dateFormat = "MMMd日 HH:mm a"
                
                timeEN.locale     = NSLocale(localeIdentifier: "en_US")
                timeEN.dateFormat = "EEE, MMM dd, HH:mm a"
                
                timeDate.dateFormat   = "yyyy-MM-dd"
                timeHour.dateFormat   = "HH:mm"
                timeMinute.dateFormat = "HH:mm:ss"
                
                // 部分說明:"en_US_POSIX" 與 "en_US" 的選擇
                // "en_US_POSIX" 適用的范圍比 "en_US"廣,如果與后臺交互讓"字符串"與"時間"轉換建議選擇"en_US_POSIX"
                // Apple 官網解釋:“en_US_POSIX” is also invariant in time (if the US, at some point in the future, changes the way it formats dates, “en_US” will change to reflect the new behaviour, but “en_US_POSIX” will not), and between machines (“en_US_POSIX” works the same on iPhone OS as it does on Mac OS X, and as it it does on other platforms).
            }
        }
        
    
  • 第 5 步:應用

            
            // rfc3339 格式
            let str = DateFormatter.sharedFormatter.rfc3339.stringFromDate(NSDate())
            print(str) // "2016-08-17T14:38:51Z"
            
            // time
            let str = DateFormatter.sharedFormatter.time.stringFromDate(NSDate())
            print(str) // "2016-08-17 (Wed) 22:39"
            
            // timeZH
            let str = DateFormatter.sharedFormatter.timeZH.stringFromDate(NSDate())
            print(str) // "8月17日 22:39 下午"
            
            // timeEN
            let str = DateFormatter.sharedFormatter.timeEN.stringFromDate(NSDate())
            print(str) // "Wed, Aug 17, 22:40 PM"
            
            // timeDate
            let str = DateFormatter.sharedFormatter.timeDate.stringFromDate(NSDate())
            print(str) // "2016-08-17"
            
            // timeHour
            let str = DateFormatter.sharedFormatter.timeHour.stringFromDate(NSDate())
            print(str) // "22:40"
            
            // timeMinute
            let str = DateFormatter.sharedFormatter.timeMinute.stringFromDate(NSDate())
            print(str) // "22:40:58"
            
    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末熙掺,一起剝皮案震驚了整個濱河市靠抑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌适掰,老刑警劉巖颂碧,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異类浪,居然都是意外死亡载城,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門费就,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诉瓦,“玉大人,你說我怎么就攤上這事〔窃瑁” “怎么了固额?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長煞聪。 經常有香客問我斗躏,道長,這世上最難降的妖魔是什么昔脯? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任啄糙,我火速辦了婚禮,結果婚禮上云稚,老公的妹妹穿的比我還像新娘隧饼。我一直安慰自己,他們只是感情好静陈,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布燕雁。 她就那樣靜靜地躺著,像睡著了一般鲸拥。 火紅的嫁衣襯著肌膚如雪贵白。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天崩泡,我揣著相機與錄音,去河邊找鬼猬膨。 笑死角撞,一個胖子當著我的面吹牛,可吹牛的內容都是我干的勃痴。 我是一名探鬼主播谒所,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沛申!你這毒婦竟也來了劣领?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤铁材,失蹤者是張志新(化名)和其女友劉穎尖淘,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體著觉,經...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡村生,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了饼丘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趁桃。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出卫病,到底是詐尸還是另有隱情油啤,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布蟀苛,位于F島的核電站益咬,受9級特大地震影響,放射性物質發(fā)生泄漏屹逛。R本人自食惡果不足惜础废,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望罕模。 院中可真熱鬧评腺,春花似錦、人聲如沸淑掌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抛腕。三九已至芋绸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間担敌,已是汗流浹背摔敛。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留全封,地道東北人马昙。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像刹悴,于是被迫代替她去往敵國和親行楞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容