Just a Computer Graphics Studio & My Life

[iOS] NSDate

原本以為獲取日期和時間的方法很簡單,沒想到它是如此深奧,我查詢一些跟NSDate相關的API用法,只要掌握幾個簡單的原則,就可運用自如。像是由 NSDate 轉換為 NSString,和由 NSString 轉換為 NSDate

直接看程式碼,就知道怎麼使用。關鍵在於NSDateFormatter,是它讓NSDate和NSString可以換轉自如。

//
//  main.m
//  HappyMan's Program - NSDate
//  Xcode 4.5
//  Created by ShengWen on 13/01/04.
//  Copyright (c) 2013年 ShengWen. All rights reserved.
//  https://cg2010studio.wordpress.com/
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
// 從現在開始 100000 秒後的日期
NSDate *today = [NSDate dateWithTimeIntervalSinceNow:100000];
[dateFormat setDateStyle:NSDateFormatterFullStyle];
NSString *dateString = [dateFormat stringFromDate:today];
NSLog(@"FullStyle~Date: %@", dateString);
[dateFormat setDateStyle:NSDateFormatterLongStyle];
dateString = [dateFormat stringFromDate:today];
NSLog(@"LongStyle~Date: %@", dateString);
[dateFormat setDateStyle:NSDateFormatterMediumStyle];
dateString = [dateFormat stringFromDate:today];
NSLog(@"MediumStyle~Date: %@", dateString);
[dateFormat setDateStyle:NSDateFormatterShortStyle];
dateString = [dateFormat stringFromDate:today];
NSLog(@"ShortStyle~Date: %@", dateString);
[dateFormat setDateStyle:NSDateFormatterNoStyle];
dateString = [dateFormat stringFromDate:today];
NSLog(@"NoStyle~Date: %@", dateString);

NSDate *nowDate = [NSDate date];
[dateFormat setDateFormat:@"MMMM d EEEE, YYYY"];
NSString *nowDateString = [dateFormat stringFromDate:nowDate];
NSLog(@"%@",nowDateString);
NSString *theEndOfTheWorldDateStr = @"20121221";
// Convert string to date object
[dateFormat setDateFormat:@"yyyyMMdd"];
NSDate *theEndOfTheWorlDate = [dateFormat dateFromString:theEndOfTheWorldDateStr];
NSLog(@"theEndOfTheWorldDate: %@",theEndOfTheWorlDate);
// Convert date object to desired output format
[dateFormat setDateFormat:@"EEEE MMMM d, YYYY"];
theEndOfTheWorldDateStr = [dateFormat stringFromDate:theEndOfTheWorlDate];
NSLog(@"theEndOfTheWorldDateStr: %@",theEndOfTheWorldDateStr);

return 0;
}

最後兩個轉換,string轉date object和date object轉string,可以期望的格式轉換。

執行結果:

2013-01-04 19:38:28.612 HappyMan’s First Program[3553:403] FullStyle~Date: 201315日星期六

2013-01-04 19:38:28.613 HappyMan’s First Program[3553:403] LongStyle~Date: 201315

2013-01-04 19:38:28.615 HappyMan’s First Program[3553:403] MediumStyle~Date: 2013/1/5

2013-01-04 19:38:28.617 HappyMan’s First Program[3553:403] ShortStyle~Date: 13/1/5

2013-01-04 19:38:28.617 HappyMan’s First Program[3553:403] NoStyle~Date: 

2013-01-04 19:38:28.618 HappyMan’s First Program[3553:403] 1 4 星期五, 2013

2013-01-04 19:38:28.619 HappyMan’s First Program[3553:403] theEndOfTheWorldDate: 2012-12-20 16:00:00 +0000

2013-01-04 19:38:28.620 HappyMan’s First Program[3553:403] theEndOfTheWorldDateStr: 星期五 12 21, 2012

至於常用的參數可參考下表~

與時間相關

參數      代表意義
a        AM/PM (上午/下午)
K        0~11 有0時的12小時制
h        1~12 12小時制
H        0~23 有0時的24小时制
k        1~24 24小時制
m        0~59 分鐘
s        0~59 秒數
s        秒數的個位數
A        0~86399999 一天當中的第幾微秒

與日期相關

參數      代表意義
d        1~31 日期
D        1~366 一年的第幾天
e        1~7 一週的第幾天
c/cc     1~7 一週的第幾天,星期日為第一天

ccc      星期幾縮寫
E~EEE    星期幾縮寫
cccc     星期幾全名
EEEE     星期幾全名

F        1~5 每月第幾周,一周的第一天為周一
w        1~5 每月第幾周,一周的第一天為周日
w        1~53 一年的第幾周,從去年的最後一個周日算起,一周的第一天為周日

L/LL     1~12 第幾個月
M/MM     1~12 第幾個月
LLL      月份縮寫
MMM      月份縮寫
LLLL     月份全名
MMMM     月份全名

u        完整年份
y/yyyy   完整年份
Y/YYYY   完整年份,從星期天開始的第一周算起
yy/yyy   兩位數的年份
YY/YYY   兩位數的年份,從星期天開始的第一周算起

閒聊

還滿多可以嘗試,有空來玩玩,其餘的就請高人指點迷津囉~

參考:

Advertisements

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: