Как получить NSDate день, месяц и год в целочисленном формате? - PullRequest
95 голосов
/ 02 июня 2011

Я хочу получить компоненты дня, месяца и года NSDate в целочисленной форме, т.е. если дата 1/2/1988, то я должен получить 1, 2 и 1988 отдельно в виде целого числа. Как я могу сделать это в iOS? Я нашел похожий вопрос, но метод descriptionWithCalendarFormat: выдает предупреждение и, похоже, уже устарел.

Ответы [ 9 ]

221 голосов
/ 02 июня 2011

Вот, пожалуйста,

NSDate *currentDate = [NSDate date];
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:currentDate]; // Get necessary date components

 [components month]; //gives you month
 [components day]; //gives you day
 [components year]; // gives you year

Вы можете использовать NSDateComponents для этого, как указано выше.

Пожалуйста, посетите эту страницу для подробностей.

Надеюсь, это поможет.

17 голосов
/ 02 июня 2011

Да, с помощью NSCalendar, хотя, я думаю, это сделает вашу работу.

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];
NSInteger day = [components day];    
NSInteger month = [components month];
NSInteger year = [components year];
13 голосов
/ 23 августа 2015

Swift

let components = NSCalendar.currentCalendar().components([.Day, .Month, .Year], fromDate: self)
let day = components.day
let month = components.month
let year = components.year

Для удобства вы можете поместить это в расширение NSDate и заставить его возвращать кортеж:

extension NSDate: Comparable {

    var dayMonthYear: (Int, Int, Int) {
        let components = NSCalendar.currentCalendar().components([.Day, .Month, .Year], fromDate: self)
        return (components.day, components.month, components.year)
    }
}

Теперь вам нужно только написать:

let (day, month, year) = date.dayMonthYear

Если вы хотите, например, получите только год, в котором вы можете написать:

let (_, _, year) = date.dayMonthYear
9 голосов
/ 02 июня 2011

Вы можете использовать NSDateComponents, чтобы получить это,

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
NSDate *currDate = [NSDate date];
NSDateComponents *dComp = [calendar components:( NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit ) 
                                      fromDate:currDate];

int day = [dComp day];
int month = [dComp month];
int year = [dComp year];
7 голосов
/ 20 ноября 2014

Для тех, кто просто копирует и вставляет прямо из Интернета, как я, это небольшое обновление для iOS 8

NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:[NSDate date]];
[components day]; //Day
[components month];//Month
[components year];//Year

Разница в NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay NSMonthCalendarUnit | NSDayCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit устарела

6 голосов
/ 31 марта 2017

Поместите его в расширение и живите своей жизнью ??

extension Date{
    var day:Int {return Calendar.current.component(.day, from:self)}
    var month:Int {return Calendar.current.component(.month, from:self)}
    var year:Int {return Calendar.current.component(.year, from:self)}
}
Date().day//22
Date().month//4
Date().year//2017

Swift 3.0 (это итерация предыдущих ответов, но она решает все ваши будущие проекты приложений)

2 голосов
/ 12 декабря 2012

U можете попробовать это .......

Mycal = [NSCalendar currentCalendar];
today = [NSDate date];
compA =[Mycal components:(NSMonthCalendarUnit | NSDayCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];     
FirstDateofMonth=[today dateByAddingTimeInterval:([compA day]-1)*(-24*60*60)];

compA =[Mycal components:(NSMonthCalendarUnit | NSDayCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit) fromDate:FirstDateofMonth];
today = FirstDateofMonth;
compA = [Mycal components:(NSMonthCalendarUnit | NSDayCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];
[compA setMonth:([compA month])];
[self DrawMonthInPortraitView];
[compA retain];
1 голос
/ 06 марта 2017
let date = Date()
let calendar = Calendar.current

let year = calendar.component(.year, from: date)
let month = calendar.component(.month, from: date)
let day = calendar.component(.day, from: date)
print("hours = \(year):\(month):\(day)")
1 голос
/ 02 апреля 2015
NSDate *currentDate = [NSDate date];
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:currentDate]; // Get necessary date components

[components month]; //gives you month
[components day]; //gives you day
[components year]; // gives you year

NSString *temp=[NSString stringWithFormat:@"Months:%d Day:%d Year:%d",[components month],  [components day],[components year]];
NSLog(@"%@",temp);
...