使用 Swift 3.0 操控日期

作者:Joe,原文鏈接坚嗜,原文日期:2016-09-20
譯者:Cwift夯膀;校對(duì):walkingway;定稿:CMB

當(dāng)你在想要 大規(guī)模重命名 時(shí)苍蔬,一個(gè)附帶的挑戰(zhàn)就是要確保所有相關(guān)的文檔都必須同步更新诱建。比如,截至到 2016 年 9 月 20 日碟绑,DateFormatter 的文檔依舊沒有與版本統(tǒng)一俺猿,引用的是 Swift 2.3 風(fēng)格的 API(譯者注:現(xiàn)在是 2017年,文檔依舊沒有更新...)格仲。隨著時(shí)間的推移押袍,這些疏漏毫無疑問都會(huì)被糾正,這里是一些使用 Date 以及 DateFormatter 實(shí)現(xiàn)的日期格式化的示例抓狭。

官方文檔中當(dāng)前的示例如下:

let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .mediumStyle
dateFormatter.timeStyle = .noStyle
 
let date = Date(timeIntervalSinceReferenceDate: 118800)
 
// US English Locale (en_US)
dateFormatter.locale = Locale(localeIdentifier: "en_US")
NSLog("%@", dateFormatter.stringFromDate(date)) // Jan 2, 2001
 
// French Locale (fr_FR)
dateFormatter.locale = Locale(localeIdentifier: "fr_FR")
NSLog("%@", dateFormatter.stringFromDate(date)) // 2 janv. 2001
 
// Japanese Locale (ja_JP)
dateFormatter.locale = Locale(localeIdentifier: "ja_JP")
NSLog("%@", dateFormatter.stringFromDate(date)) // 2001/01/02

在 Swift 3.0 中變?yōu)椋?/p>

let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .none

注意 .mediumStyle 被簡(jiǎn)化為 .medium伯病。這種簡(jiǎn)化符合規(guī)則,我們知道類型是 DateFormatter.Style 所以沒有理由重復(fù) Style 一詞否过。使用 .none 替換 .noStyle 也是同理午笛。

現(xiàn)在看看設(shè)置格式化器的環(huán)境時(shí)發(fā)生的改動(dòng):

// US English Locale (en_US)
dateFormatter.locale = Locale(identifier: "en_US")
print(dateFormatter.string(from:date)) // Jan 2, 2001
 
// French Locale (fr_FR)
dateFormatter.locale = Locale(identifier: "fr_FR")
print(dateFormatter.string(from:date)) // 2 janv. 2001
 
// Japanese Locale (ja_JP)
dateFormatter.locale = Locale(identifier: "ja_JP")
print(dateFormatter.string(from:date)) // 2001/01/02

再一次,我們看到了從 Locale(localeIdentifier:)Locale(identifier:) 的簡(jiǎn)化苗桂。減少了類型名及其引用药磺。類似地,DateFormatterstringFromDate 方法已經(jīng)被簡(jiǎn)化為 string(from:)煤伟,完整的方法簽名是 string(from:Date)癌佩。理解這種模式了嗎木缝?

繼續(xù)用一個(gè) String 描述的信息生成一個(gè) Date 對(duì)象,蘋果的文檔展示了這樣的示例:

let RFC3339DateFormatter = DateFormatter()
RFC3339DateFormatter.locale = Locale(localeIdentifier: "en_US_POSIX")
RFC3339DateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
RFC3339DateFormatter.timeZone = TimeZone(forSecondsFromGMT: 0)
 
let string = "1996-12-19T16:39:57-08:00"
let date = RFC3339DateFormatter.dateFromString(string)

為了減少啰嗦和不必要的詞匯围辙,得到了下面的寫法:

let RFC3339DateFormatter = DateFormatter()
RFC3339DateFormatter.locale = Locale(identifier: "en_US_POSIX")
RFC3339DateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
RFC3339DateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
 
let string = "1996-12-19T16:39:57-08:00"
let date = RFC3339DateFormatter.date(from:string)

TimeZone 構(gòu)造器中刪除了無關(guān)的三個(gè)字符(for)我碟,而且正如期望, dateFromString 方法變成了 date(from:)姚建。

經(jīng)驗(yàn)法則

從 Swift 2 轉(zhuǎn)換到 Swift 3 時(shí)矫俺,一個(gè)通用法則是:去除多余的單詞。如果你之前習(xí)慣了寫 formatter.timeStyle = .fullStyle掸冤,現(xiàn)在你要習(xí)慣 formatter.timeStyle = .full 的寫法厘托。如果你看到了 someTypeFromAnotherType() 這樣的寫法,它可能已經(jīng)被替換為 someType(from:AnotherType)稿湿。說一下我的體驗(yàn)铅匹,在使用 Swift 3 幾個(gè)月時(shí)間后,再回到 Swift 2 會(huì)感覺命名過于冗長(zhǎng)饺藤,這還是在我喜歡這種詳細(xì)自說明語言風(fēng)格的前提下包斑。不過一旦你學(xué)會(huì)了 Swift,你會(huì)擁抱海明威而避開托爾斯泰策精。

愉快地 Swift 吧舰始!

本文由 SwiftGG 翻譯組翻譯,已經(jīng)獲得作者翻譯授權(quán)咽袜,最新文章請(qǐng)?jiān)L問 http://swift.gg

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末枕稀,一起剝皮案震驚了整個(gè)濱河市询刹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌萎坷,老刑警劉巖凹联,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異哆档,居然都是意外死亡蔽挠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門瓜浸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來澳淑,“玉大人,你說我怎么就攤上這事插佛「苎玻” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵雇寇,是天一觀的道長(zhǎng)氢拥。 經(jīng)常有香客問我蚌铜,道長(zhǎng),這世上最難降的妖魔是什么嫩海? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任冬殃,我火速辦了婚禮喊熟,結(jié)果婚禮上哀九,老公的妹妹穿的比我還像新娘阵难。我一直安慰自己旭从,他們只是感情好爪瓜,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布传于。 她就那樣靜靜地躺著盗忱,像睡著了一般格郁。 火紅的嫁衣襯著肌膚如雪展箱。 梳的紋絲不亂的頭發(fā)上旨枯,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音混驰,去河邊找鬼攀隔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛栖榨,可吹牛的內(nèi)容都是我干的昆汹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼婴栽,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼满粗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起愚争,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤映皆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后轰枝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捅彻,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年鞍陨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了步淹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诚撵,死狀恐怖缭裆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情砾脑,我是刑警寧澤幼驶,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站韧衣,受9級(jí)特大地震影響盅藻,放射性物質(zhì)發(fā)生泄漏购桑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一氏淑、第九天 我趴在偏房一處隱蔽的房頂上張望勃蜘。 院中可真熱鬧,春花似錦假残、人聲如沸缭贡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阳惹。三九已至,卻和暖如春眶俩,著一層夾襖步出監(jiān)牢的瞬間莹汤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工颠印, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纲岭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓线罕,卻偏偏與公主長(zhǎng)得像止潮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钞楼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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

  • 日期的處理在大大小小的iOS項(xiàng)目中都十分常見,隨著Swift3.0正式版的即將推出,語法的改變讓NSDate以及相...
    魚與愚七閱讀 776評(píng)論 0 0
  • 處理日期的常見情景 NSDate -> String & String -> NSDate 日期比較 日期計(jì)算(基...
    KAKA_move閱讀 816評(píng)論 0 0
  • 轉(zhuǎn)載自:https://github.com/Tim9Liu9/TimLiu-iOS[https://github...
    香橙柚子閱讀 8,586評(píng)論 0 36
  • 舉個(gè)例子喇闸,一個(gè)科學(xué)實(shí)驗(yàn): 3個(gè)人進(jìn)入3個(gè)一樣的房間參觀,其中一個(gè)你問他請(qǐng)問有沒有渴窿凤,然后買一杯可樂遞給他喝仅偎,第二...
    應(yīng)而不藏閱讀 206評(píng)論 0 0
  • 捏脊是一種背部按摩穴位及手法,多用于治療小兒積聚一類的疾患雳殊,如食積、疳積窗轩、嘔吐便秘夯秃、泄瀉等,故又稱“捏積”痢艺;還可消...
    de7c69bfb64b閱讀 288評(píng)論 0 0