Iphone 如何以整数格式获取NSDate日、月和年?

Iphone 如何以整数格式获取NSDate日、月和年?,iphone,datetime,date,nsdate,nsdateformatter,Iphone,Datetime,Date,Nsdate,Nsdateformatter,我想得到整数形式的NSDate的日、月和年分量,即如果日期是1/2/1988,那么我应该分别得到1、2和1988作为整数。我如何在iOS中做到这一点?我发现了类似的问题,但是方法descriptionWithCalendarFormat:给出了一个警告,现在似乎已经被弃用了。给你 NSDate *currentDate = [NSDate date]; NSCalendar* calendar = [NSCalendar currentCalendar]; NSDateComponents* c

我想得到整数形式的
NSDate
的日、月和年分量,即如果日期是1/2/1988,那么我应该分别得到1、2和1988作为整数。我如何在iOS中做到这一点?我发现了类似的问题,但是方法
descriptionWithCalendarFormat
:给出了一个警告,现在似乎已经被弃用了。

给你

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

详情请浏览


希望能有所帮助。

是的,但使用NSCalendar,我认为这将使您的工作更加顺利

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

您可以使用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];
你可以试试这个

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

对于那些像我这样直接从网上复制粘贴的人来说,这是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
已被弃用

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);
为方便起见,您可以将其放入扩展名
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

把它放在一个扩展中,为正确答案提供代码,让你的生活+1。但是您应该提到,这些信息来自NSDateComponents,而不是NSDateFormatter。@Black对此表示歉意。更新了我的答案。@Janak Nirmal Write可能是特定的一点您无法解释如何获取用户无法理解的日、月、年的字符串格式。@Janak Nirmal您应该解释如何获取精确值。为避免弃用警告:NSDateComponents*components=[日历组件:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:currentDate];我喜欢您的方法。不过建议将参数命名更改为
(天:Int,月:Int,年:Int)
,这样您就可以通过使用
date.dayMonthYear.day
date.dayMonthYear.month
date.dayMonthYear.year
来使用结果。查看
NSDate
是否只需要一个整数。虽然此代码可以回答问题,但提供了有关此代码回答问题的原因和/或方式的其他上下文提高其长期价值。
let (_, _, year) = date.dayMonthYear
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)")