วิธีรับ NSDate วันเดือนและปีในรูปแบบจำนวนเต็ม?


96

ฉันต้องการรับองค์ประกอบของวันเดือนและปีNSDateในรูปแบบจำนวนเต็มเช่นถ้าวันที่คือ 1/2/1988 ฉันควรจะได้ 1, 2 และ 1988 แยกกันเป็นจำนวนเต็ม ฉันจะทำสิ่งนี้ใน iOS ได้อย่างไร ฉันพบคำถามที่คล้ายกัน แต่วิธีการdescriptionWithCalendarFormat: ให้คำเตือนและดูเหมือนว่าจะเลิกใช้แล้วในตอนนี้


ดูแปลง NSDate เพื่อจำนวนเต็มNSDateถ้าเพียงจำนวนเต็มเดียวเป็นสิ่งจำเป็นสำหรับ
Suragch

คำตอบ:


13

รวดเร็ว

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

2
ฉันชอบแนวทางของคุณ แม้ว่าข้อเสนอแนะคือการเปลี่ยนการตั้งชื่อพารามิเตอร์ที่จะ(day: Int, month: Int, year: Int)วิธีการที่คุณสามารถใช้ผลโดยใช้date.dayMonthYear.day, ,date.dayMonthYear.month date.dayMonthYear.year
Paul Peelen

224

อยู่นี่ไง,

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 ได้ดังกล่าวข้างต้น

โปรดไปที่หน้านี้เพื่อดูรายละเอียด

หวังว่าจะช่วยได้


1
+1 สำหรับการระบุรหัสสำหรับคำตอบที่ถูกต้อง แต่คุณควรระบุว่าข้อมูลมาจาก NSDateComponents ไม่ใช่ NSDateFormatter
Black Frog

@ แบล็คขอโทษที่. อัปเดตคำตอบของฉัน
Janak Nirmal

1
@ Janak Nirmal เขียนเฉพาะจุดที่คุณไม่สามารถอธิบายวิธีรับรูปแบบสตริงสำหรับวันเดือนปีที่ผู้ใช้ไม่เข้าใจ
Annu

1
@JanakNirmal คุณควรอธิบายว่าได้รับค่าที่แน่นอนอย่างไร
Annu

3
เพื่อหลีกเลี่ยงคำเตือนการเลิกใช้งาน: NSDateComponents * components = [องค์ประกอบปฏิทิน: NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate: currentDate];
Rodrigo Pinto

17

ใช่โดยใช้ NSCalendar ฉันคิดว่านี่จะทำให้งานของคุณ

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

9

คุณสามารถใช้ 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];

9

ใส่ไว้ในส่วนขยายและใช้ชีวิตของคุณ🍸🏖

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 (เป็นการทำซ้ำคำตอบก่อนหน้านี้ แต่จะแก้ไขสำหรับโครงการแอปในอนาคตทั้งหมดของคุณ)


7

สำหรับผู้ที่คัดลอกและวางโดยตรงจากเว็บเช่นฉันนี่เป็นการอัปเดตเล็ก ๆ สำหรับ 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เลิกใช้ความแตกต่างแล้ว


2

ลองดูสิ .......

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
แม้ว่ารหัสนี้อาจตอบคำถาม แต่การให้บริบทเพิ่มเติมเกี่ยวกับสาเหตุและ / หรือวิธีที่รหัสนี้ตอบคำถามช่วยเพิ่มมูลค่าในระยะยาว
Donald Duck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.