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.

Yogi
sumber
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.

Janak Nirmal
sumber
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];
pengguna755278
sumber
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
Ixx
sumber
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];
Pengembang Seluler iOS Android
sumber
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)

eonist
sumber
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

Jansen
sumber
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];
Dinesh_
sumber
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);
annu
sumber
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)")
oscarr
sumber
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