Làm thế nào để lấy NSDate ngày, tháng và năm ở định dạng số nguyên?


95

Tôi muốn lấy các thành phần ngày, tháng và năm NSDateở dạng số nguyên, tức là nếu ngày là 1/2/1988 thì tôi nên lấy riêng 1, 2 và 1988 dưới dạng số nguyên. Làm cách nào để thực hiện việc này trong iOS? Tôi đã tìm thấy câu hỏi tương tự nhưng phương pháp descriptionWithCalendarFormat: đưa ra cảnh báo và có vẻ như hiện không được dùng nữa.


Xem Chuyển đổi NSDate thành Số nguyên nếu chỉ cần một số nguyên duy nhất NSDate.
Suragch

Câu trả lời:


223

Của bạn đây,

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

Bạn có thể sử dụng NSDateComponents cho điều đó như trên.

Vui lòng truy cập trang này để biết chi tiết.

Hy vọng nó giúp.


1
+1 để cung cấp mã cho câu trả lời chính xác. Nhưng bạn nên lưu ý rằng thông tin đến từ NSDateComponents, không phải NSDateFormatter.
Black Frog

@Black Xin lỗi vì điều đó. Đã cập nhật câu trả lời của tôi.
Janak Nirmal

1
@ Janak Nirmal Viết một điểm cụ thể mà bạn không thể giải thích cách lấy định dạng chuỗi ngày, tháng, năm, người dùng không thể hiểu được.
annu

1
@JanakNirmal, bạn nên giải thích cách nhận giá trị chính xác.
annu

3
Để tránh cảnh báo không dùng nữa: NSDateComponents * components = [các thành phần lịch: NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate: currentDate];
Rodrigo Pinto

17

Có bằng cách sử dụng NSCalendar, tuy nhiên, tôi nghĩ rằng điều này sẽ làm cho công việc của bạn.

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];
NSInteger day = [components day];    
NSInteger month = [components month];
NSInteger year = [components year];

13

Nhanh

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

Để thuận tiện, bạn có thể đặt nó vào một NSDatetiện ích mở rộng và làm cho nó trả về một tuple:

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)
    }
}

Bây giờ bạn chỉ phải viết:

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

Nếu bạn muốn, ví dụ: chỉ lấy năm bạn có thể viết:

let (_, _, year) = date.dayMonthYear

2
Tôi thích cách tiếp cận của bạn. Một gợi ý mặc dù là thay đổi cách đặt tên tham số (day: Int, month: Int, year: Int), như vậy bạn có thể sử dụng kết quả bằng cách sử dụng date.dayMonthYear.day, date.dayMonthYear.month, date.dayMonthYear.year.
Paul Peelen

9

Bạn có thể sử dụng NSDateComponents để có được điều này,

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];

8

Đặt nó trong một tiện ích mở rộng và sống cuộc sống của bạn 🍸🏖

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 (Đó là sự lặp lại của các câu trả lời trước đó, nhưng giải quyết nó cho tất cả các dự án ứng dụng trong tương lai của bạn)


7

Đối với những người chỉ sao chép và dán trực tiếp từ web, như tôi, đây là một bản cập nhật nhỏ cho 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

Sự khác biệt NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay NSMonthCalendarUnit | NSDayCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnitđã không được chấp nhận


2

Bạn có thể thử cái này .......

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
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);

1
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
Mặc dù mã này có thể trả lời câu hỏi, nhưng việc cung cấp thêm ngữ cảnh liên quan đến lý do và / hoặc cách mã này trả lời câu hỏi sẽ cải thiện giá trị lâu dài của nó.
Donald Duck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.