【问题标题】:How to get NSDate day, month and year in integer format?如何以整数格式获取 NSDate 日、月和年?
【发布时间】:2011-06-02 11:44:33
【问题描述】:

我想以整数形式获取 NSDate 的日、月和年部分,即如果日期是 1988 年 1 月 2 日,那么我应该分别以整数形式获取 1、2 和 1988。我怎样才能在 iOS 中做到这一点?我发现了类似的问题,但方法 descriptionWithCalendarFormat: 给出了警告,现在似乎已被弃用。

【问题讨论】:

标签: iphone datetime date nsdate nsdateformatter


【解决方案1】:

你来了,

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。

详情请访问this page

【讨论】:

  • +1 用于提供正确答案的代码。但是你应该提到信息来自 NSDateComponents,而不是 NSDateFormatter。
  • @Black 为此道歉。更新了我的答案。
  • @Janak Nirmal 写的具体点你无法解释如何获取用户无法理解的日、月、年的字符串格式。
  • @JanakNirmal 你应该解释一下如何获得确切的价值。
  • 为了避免弃用警告:NSDateComponents* components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate: currentDate];
【解决方案2】:

是的,但是通过使用 NSCalendar,我认为这会让你的工作顺利进行。

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

【讨论】:

    【解决方案3】:

    斯威夫特

    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
    

    【讨论】:

    • 我喜欢你的方法。不过建议将参数命名更改为(day: Int, month: Int, year: Int),这样您就可以使用date.dayMonthYear.daydate.dayMonthYear.monthdate.dayMonthYear.year 来使用结果。
    【解决方案4】:

    你可以使用 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];
    

    【讨论】:

      【解决方案5】:

      把它放在一个扩展中,过你的生活??

      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(它是以前答案的迭代,但可以为您未来的所有应用项目解决它)

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

          你可以试试这个.......

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

          【讨论】:

            【解决方案8】:
            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);
            

            【讨论】:

              【解决方案9】:
              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)")
              

              【讨论】:

              • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
              猜你喜欢
              • 2011-04-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-02-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多