IOS開發(fā)之格式化日期時間(轉(zhuǎn))

在開發(fā)iOS程序時纬纪,有時候需要將時間格式調(diào)整成自己希望的格式揍移,這個時候我們可以用NSDateFormatter類來處理。
例如:

//實例化一個NSDateFormatter對象
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//設(shè)定時間格式,這里可以設(shè)置成自己需要的格式
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//用[NSDate date]可以獲取系統(tǒng)當(dāng)前時間
NSString *currentDateStr = [dateFormatter stringFromDate:[NSDate date]];
//輸出格式為:2010-10-27 10:22:13
NSLog(@"%@",currentDateStr);
//alloc后對不使用的對象別忘了release
[dateFormatter release];

字符說明

(:)

時間分隔符呆盖。在某些區(qū)域設(shè)置中炫彩,可以使用其他字符表示時間分隔符。時間分隔符在格式化時間值時分隔小時絮短、分鐘和秒江兢。格式化輸出中用作時間分隔符的實際字符由您的應(yīng)用程序的當(dāng)前區(qū)域性值確定。

(/)

日期分隔符丁频。在某些區(qū)域設(shè)置中杉允,可以使用其他字符表示日期分隔符。日期分隔符在格式化日期值時分隔日席里、月和年叔磷。格式化輸出中用作日期分隔符的實際字符由您的應(yīng)用程序的當(dāng)前區(qū)域性確定。

(%)

用于表明不論尾隨什么字母奖磁,隨后字符都應(yīng)該以單字母格式讀取改基。也用于表明單字母格式應(yīng)以用戶定義格式讀取。有關(guān)更多詳細(xì)信息咖为,請參見下面的內(nèi)容秕狰。

d

將日顯示為不帶前導(dǎo)零的數(shù)字(如 1)。如果這是用戶定義的數(shù)字格式中的唯一字符躁染,請使用 %d鸣哀。

dd

將日顯示為帶前導(dǎo)零的數(shù)字(如 01)。

EEE

將日顯示為縮寫形式(例如 Sun)吞彤。

EEEE

將日顯示為全名(例如 Sunday)我衬。

M

將月份顯示為不帶前導(dǎo)零的數(shù)字(如一月表示為 1)叹放。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %M挠羔。

MM

將月份顯示為帶前導(dǎo)零的數(shù)字(例如 01/12/01)井仰。

MMM

將月份顯示為縮寫形式(例如 Jan)。

MMMM

將月份顯示為完整月份名(例如 January)破加。

gg

顯示時代/紀(jì)元字符串(例如 A.D.)

h

使用 12 小時制將小時顯示為不帶前導(dǎo)零的數(shù)字(例如 1:15:15 PM)俱恶。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %h拌喉。

hh

使用 12 小時制將小時顯示為帶前導(dǎo)零的數(shù)字(例如 01:15:15 PM)速那。

H

使用 24 小時制將小時顯示為不帶前導(dǎo)零的數(shù)字(例如 1:15:15)。如果這是用戶定義的數(shù)字格式中的唯一字符尿背,請使用 %H端仰。

HH

使用 24 小時制將小時顯示為帶前導(dǎo)零的數(shù)字(例如 01:15:15)。

m

將分鐘顯示為不帶前導(dǎo)零的數(shù)字(例如 12:1:15)田藐。如果這是用戶定義的數(shù)字格式中的唯一字符荔烧,請使用 %m。

mm

將分鐘顯示為帶前導(dǎo)零的數(shù)字(例如 12:01:15)汽久。

s

將秒顯示為不帶前導(dǎo)零的數(shù)字(例如 12:15:5)鹤竭。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %s景醇。

ss

將秒顯示為帶前導(dǎo)零的數(shù)字(例如 12:15:05)臀稚。

f

顯示秒的小數(shù)部分。例如三痰,ff 將精確顯示到百分之一秒吧寺,而 ffff 將精確顯示到萬分之一秒。用戶定義格式中最多可使用七個 f 符號散劫。如果這是用戶定義的數(shù)字格式中的唯一字符稚机,請使用 %f。

t

使用 12 小時制获搏,并對中午之前的任一小時顯示大寫的 A赖条,對中午到 11:59 P.M 之間的任一小時顯示大寫的 P。如果這是用戶定義的數(shù)字格式中的唯一字符常熙,請使用 %t纬乍。

tt

對于使用 12 小時制的區(qū)域設(shè)置,對中午之前任一小時顯示大寫的 AM症概,對中午到 11:59 P.M 之間的任一小時顯示大寫的 PM蕾额。

對于使用 24 小時制的區(qū)域設(shè)置,不顯示任何字符彼城。

y

將年份 (0-9) 顯示為不帶前導(dǎo)零的數(shù)字。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %y募壕。

yy

以帶前導(dǎo)零的兩位數(shù)字格式顯示年份(如果適用)调炬。

yyy

以四位數(shù)字格式顯示年份。

yyyy

以四位數(shù)字格式顯示年份舱馅。

z

顯示不帶前導(dǎo)零的時區(qū)偏移量(如 -8)缰泡。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %z代嗤。

zz

顯示帶前導(dǎo)零的時區(qū)偏移量(例如 -08)

zzz

顯示完整的時區(qū)偏移量(例如 -08:00)

格式顯示
M/d/yy

12/7/58

d-MMM

7-Dec

d-MMMM-yy

7-December-58

d MMMM

7 December

MMMM yy

December 58

hh:mm tt

08:50 PM

h:mm:ss t

8:50:35 P

H:mm

20:50

H:mm:ss

20:50:35

M/d/yyyy H:mm

12/7/1958 20:50

IOS NSDate日期操作總結(jié)

1 當(dāng)前時間創(chuàng)建NSDate

      NSDate *myDate = [NSDate date];

      NSLog(@"myDate = %@",myDate);

2 //從現(xiàn)在開始的24小時

        NSTimeInterval secondsPerDay = 24*60*60;

        NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:secondsPerDay];

        NSLog(@"myDate = %@",tomorrow);

3//根據(jù)已有日期創(chuàng)建日期

         NSTimeInterval secondsPerDay1 = 24*60*60;

        NSDate *now = [NSDate date];

        NSDate *yesterDay = [now addTimeInterval:-secondsPerDay1];

        NSLog(@"yesterDay = %@",yesterDay);

4//比較日期

        BOOL sameDate = [now isEqualToDate:yesterDay];

        NSLog(@"sameDate = %lu",sameDate);

        4.1//獲取較早的日期

        NSDate *earlierDate = [yesterDay earlierDate:now];

        NSLog(@"earlierDate  = %@",earlierDate);

        4.2//較晚的日期

        NSDate *laterDate = [yesterDay laterDate:now];

        NSLog(@"laterDate  = %@",laterDate);

 

        //兩個日期之間相隔多少秒

        NSTimeInterval secondsBetweenDates= [yesterDay timeIntervalSinceDate:now];

        NSLog(@"secondsBetweenDates=  %lf",secondsBetweenDates);

        //通過NSCALENDAR類來創(chuàng)建日期

        NSDateComponents *comp = [[NSDateComponentsalloc]init];

        [comp setMonth:06];

        [comp setDay:01];

        [comp setYear:2001];

        NSCalendar *myCal = [[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar];

        NSDate *myDate1 = [myCal dateFromComponents:comp];

        NSLog(@"myDate1 = %@",myDate1);

 

        //從已有日期獲取日期

        unsigned units  = NSMonthCalendarUnit|NSDayCalendarUnit|NSYearCalendarUnit;

        NSDateComponents *comp1 = [myCal components:units fromDate:now];

        NSInteger month = [comp1 month];

        NSInteger year = [comp1 year];

        NSInteger day = [comp1 day];

        //NSDateFormatter實現(xiàn)日期的輸出

        NSDateFormatter *formatter = [[NSDateFormatteralloc]init];

        [formatter setDateStyle:NSDateFormatterFullStyle];//直接輸出的話是機器碼

        //或者是手動設(shè)置樣式[formatter setDateFormat:@"yyyy-mm-dd"];

        NSString *string = [formatter stringFromDate:now];

        NSLog(@"string = %@",string);

        NSLog(@"formater = %@",formatter);

 

 

//獲取日期格式對象

- (NSDateFormatter *)dateFormatter {

if (dateFormatter == nil) {

dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateStyle:NSDateFormatterMediumStyle];

[dateFormatter setTimeStyle:NSDateFormatterNoStyle];

}

return dateFormatter;

}

NSDate與NSDateFormatter的相關(guān)用法

1.NSDateFormatter配合NSDate與NSString之間的轉(zhuǎn)化
NSDateFormatter有下面2個方法:

  - (NSString *)stringFromDate:(NSDate *)date;//NSDate轉(zhuǎn)NSString
  - (NSDate *)dateFromString:(NSString *)string;//NSString轉(zhuǎn)NSDate

e.g.

 NSString *dateString=@"1900-01-01";
 NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init];
 [dateFormatter setDateFormat:@"yyyy-MM-dd"];
 NSDate *date=[dateFormatter dateFromString:dateString];
 [dateFormatter release];

NSString轉(zhuǎn)NSDate與上面類似

 NSString *dateString=[dateFormatter dateFromString:[NSDate date]];

2.NSDateFormatter 的一些格式介紹

  [dateFormatter setDateFormat:@"yyyy年MM月dd日#EEEE"]; // EEEE為星期幾棘钞,EEE為周幾
  [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  [dateFormatter setDateFormat:@"yyyy年MMMMd日"];//MMMM 為xx月,一個d可以省去01日前的0

3.NSString轉(zhuǎn)NSDate少一天的解決辦法
用下面這種格式化方式

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
   NSCalendar *calendar = [NSCalendar currentCalendar];
   NSDateComponents *components = [calendar components:(NSDayCalendarUnit | NSMonthCalendarUnit |                                  NSYearCalendarUnit) fromDate:[NSDate date]];
   NSDate *todayDate = [calendar dateFromComponents:components];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末干毅,一起剝皮案震驚了整個濱河市宜猜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌硝逢,老刑警劉巖姨拥,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異渠鸽,居然都是意外死亡叫乌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門徽缚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來憨奸,“玉大人,你說我怎么就攤上這事凿试∨旁祝” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵红省,是天一觀的道長额各。 經(jīng)常有香客問我,道長吧恃,這世上最難降的妖魔是什么虾啦? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮痕寓,結(jié)果婚禮上傲醉,老公的妹妹穿的比我還像新娘。我一直安慰自己呻率,他們只是感情好硬毕,可當(dāng)我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著礼仗,像睡著了一般吐咳。 火紅的嫁衣襯著肌膚如雪逻悠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天韭脊,我揣著相機與錄音童谒,去河邊找鬼。 笑死沪羔,一個胖子當(dāng)著我的面吹牛饥伊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔫饰,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼琅豆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了篓吁?” 一聲冷哼從身側(cè)響起茫因,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎越除,沒想到半個月后节腐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡摘盆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年翼雀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孩擂。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡狼渊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出类垦,到底是詐尸還是另有隱情狈邑,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布蚤认,位于F島的核電站米苹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏砰琢。R本人自食惡果不足惜蘸嘶,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望陪汽。 院中可真熱鬧训唱,春花似錦、人聲如沸挚冤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽训挡。三九已至澳骤,卻和暖如春歧强,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宴凉。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工誊锭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留表悬,地道東北人弥锄。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像蟆沫,于是被迫代替她去往敵國和親籽暇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,446評論 2 359

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