2011-06-15 30 views

回答

14

NSDate僅代表時間點,本身沒有格式。

將NSDate格式化爲例如一個字符串,你應該使用NSDateFormatter。它具有日曆屬性,並且如果將此屬性設置爲公曆日曆的實例,則輸出的格式將與公曆格式匹配。

NSDate *now = [NSDate date]; 

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setCalendar:gregorianCalendar]; 
[formatter setDateStyle:NSDateFormatterFullStyle]; 
[formatter setTimeStyle:NSDateFormatterFullStyle]; 

NSString *formattedDate = [formatter stringFromDate:now]; 

NSLog(@"%@", formattedDate); 

[gregorianCalendar release]; 
[formatter release]; 
+0

這怎麼能以這樣的方式來修改它返回的公曆日期爲一個NSDate,而不是一個NSString(http://stackoverflow.com/questions/16707270/nsdateformatter-not-behaving-properly-when-converting-from-buddhist-calendar-to) – acecapades 2013-05-23 07:17:43

+0

@acecapades check this http://stackoverflow.com/a/24417064/977910 – temple 2014-06-25 19:35:24

1

我挑選的答案實際上我無法比較它們。只有顯示對我的項目是不夠的。

我終於想出了一個解決方案,隱式(NSDate)currentDate - > gregorianDate 然後我們可以比較這些NSDates。

只要記住,NSDates應採用暫時的。(它不與任何日曆連接)

NSDate* currentDate = [NSDate date]; 

    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *gregorianComponents = [gregorianCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:currentDate]; 

    NSDateComponents *comps = [[NSDateComponents alloc] init]; 
    [comps setDay:[gregorianComponents day]]; 
    [comps setMonth:[gregorianComponents month]]; 
    [comps setYear:[gregorianComponents year]]; 
    [comps setHour:[gregorianComponents hour]]; 
    [comps setMinute:[gregorianComponents minute]]; 
    [comps setSecond:[gregorianComponents second]]; 


    NSCalendar *currentCalendar = [NSCalendar autoupdatingCurrentCalendar]; 
    NSDate *today = [currentCalendar dateFromComponents:comps]; 
相關問題