Bagaimana cara mendapatkan hari, bulan dan tahun NSDate dalam format integer?


95

Saya ingin mendapatkan komponen hari, bulan dan tahun NSDatedalam bentuk integer yaitu jika tanggal 1/2/1988 maka saya harus mendapatkan 1, 2 dan 1988 secara terpisah sebagai integer. Bagaimana saya bisa melakukan ini di iOS? Saya menemukan pertanyaan serupa tetapi metodenya descriptionWithCalendarFormat: memberikan peringatan dan sepertinya sudah usang sekarang.


Lihat Mengonversi NSDate menjadi Integer jika hanya diperlukan satu bilangan bulat NSDate.
Suragch

Jawaban:


223

Ini dia,

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

Anda dapat menggunakan NSDateComponents untuk itu seperti di atas.

Silakan kunjungi halaman ini untuk detailnya.

Semoga membantu.


1
1 untuk memberikan kode untuk jawaban yang benar. Tetapi Anda harus menyebutkan bahwa info tersebut berasal dari NSDateComponents, bukan NSDateFormatter.
Black Frog

@Black Minta maaf untuk itu. Memperbarui jawaban saya.
Janak Nirmal

1
@ Janak Nirmal Tuliskan secara spesifik Anda tidak bisa menjelaskan bagaimana mendapatkan format string untuk hari, bulan, tahun, Pengguna tidak bisa mengerti.
tahun

1
@JanakNirmal Anda harus menjelaskan bagaimana mendapatkan nilai yang tepat.
annu

3
Untuk menghindari peringatan penghentian: NSDateComponents * components = [komponen kalender: NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate: currentDate];
Rodrigo Pinto

17

Ya dengan menggunakan NSCalendar, saya pikir ini akan membuat Anda berhasil.

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

13

Cepat

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

Untuk kenyamanan Anda dapat meletakkan ini dalam sebuah NSDateekstensi dan membuatnya mengembalikan tupel:

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

Sekarang Anda hanya perlu menulis:

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

Jika Anda ingin misalnya, dapatkan hanya tahun Anda dapat menulis:

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

2
Saya suka pendekatan Anda. Saran meskipun adalah untuk mengubah parameter penamaan untuk (day: Int, month: Int, year: Int), dengan cara itu Anda dapat menggunakan hasil dengan menggunakan date.dayMonthYear.day, date.dayMonthYear.month, date.dayMonthYear.year.
Paul Peelen

9

Anda dapat menggunakan NSDateComponents untuk mendapatkan ini,

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

Taruh dalam perpanjangan dan jalani hidup Anda 🍸🏖

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 (Ini adalah iterasi dari jawaban sebelumnya, tetapi menyelesaikannya untuk semua proyek aplikasi Anda di masa mendatang)


7

Bagi mereka yang baru saja menyalin dan menempel langsung dari web, seperti saya, ini adalah pembaruan kecil untuk 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

Perbedaan NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay NSMonthCalendarUnit | NSDayCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnitsudah tidak digunakan lagi


2

Kamu bisa mencoba ini .......

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
Meskipun kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang mengapa dan / atau bagaimana kode ini menjawab pertanyaan tersebut meningkatkan nilai jangka panjangnya.
Donald Duck
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.