【问题标题】:Initialize a NSDate object with a specific time用特定时间初始化 NSDate 对象
【发布时间】:2011-01-25 19:46:10
【问题描述】:

我有time 格式为string,例如2:00。我想用现有的date 将它初始化为NSDate。 我试过做

   NSDateComponents *comps = [[NSDateComponents alloc] init];
   [comps setHour:2];

我无法将其与日期对象进行比较。请帮忙

【问题讨论】:

    标签: iphone nsdate


    【解决方案1】:

    试试

    NSDateComponents *comps = [[NSDateComponents alloc] init];
    [comps setDay:6];
    [comps setMonth:5];
    [comps setYear:2004];
    
    NSCalendar *gregorian = [[NSCalendar alloc]
        initWithCalendarIdentifier:NSGregorianCalendar];
    NSDate *date = [gregorian dateFromComponents:comps];
    

    您应该能够与之后的日期进行比较。

    也许你的意思是这样的。我认为将使用今天的日期进行设置,然后您可以从中创建 NSDateComponents 并设置时间值。

    NSDate *today = [NSDate date];
    NSCalendar *gregorian = [[NSCalendar alloc]
                             initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *weekdayComponents =
                        [gregorian components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];
    [weekdayComponents setHour:12];
    [weekdayComponents setMinute:10];
    [weekdayComponents setSecond:30];
    

    【讨论】:

    • 感谢您的回复。有没有办法仅使用时间组件设置此日期需要存在日期。是否可以仅更改使用 NSDate *mydate 初始化的 Date 对象的时间组件=[NSDate 日期];
    • 我想你的意思是这样的。
    • 是的,再次感谢您的快速回复。
    • NSTimeInterval Diff = [lastDate timeIntervalSinceDate:weekdayComponents];这给了我警告说不兼容的 Objective-C 类型 struct NSDateComponents 预期的 struct NSDate。
    • 只是快速更正:应该是 [weekdayComponents setSecond:30];
    【解决方案2】:

    要使用当前日期为 2 初始化 NSDate,您必须将 NSDate 拆分为包含年、月和日的组件,例如

    NSDate *today = [NSDate date];
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *weekdayComponents = [gregorian
                                           components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)
                                           fromDate:today];
    

    将小时数设置为 2

    weekdayComponents.hour = 2;
    

    然后通过这些组件创建一个新的 NSDate

    NSDate *todayAt2 = [gregorian dateFromComponents:weekdayComponents];
    

    【讨论】:

      【解决方案3】:

      您需要使用NSCalendar 对象将NSDateComponents 转换为NSDate。请参阅 Apple 在 Creating a Date from Components 上的文档。

      【讨论】:

      • 感谢您的回复。是否可以设置 NSDate 的时间组件。我可以获得一个初始化为当前日期和时间的 NSDate 对象。之后是否可以更改时间组件。
      • 使用同一个日历将NSDate转为NSDateComponents,然后设置时间,再使用日历转回NSDate。
      【解决方案4】:
        func initializeDateWithTime(date:NSDate,hrs:Int,minutes:Int) -> NSDate{
          let today = date
           let gregorian:NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
           let dateComponents = gregorian.components([.Year, .Month, .Day], fromDate: today)
      
           dateComponents.hour = hrs;
           dateComponents.minute = minute;
      
      
           let todayAtX = gregorian.dateFromComponents(dateComponents)
           return todayAtX!
      }
      

      【讨论】:

        【解决方案5】:

        只需将一些 Objective C 的答案汇总在一起,我(现在)就有了这个辅助函数:

        + (NSDate*)dateForTodayAtHour:(NSUInteger)hour andMinutes:(NSUInteger)minutes {
            NSDate* today = [NSDate date];
            NSCalendar* gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
            NSDateComponents* weekdayComponents = [gregorian components:(NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:today];
            [weekdayComponents setHour:hour];
            [weekdayComponents setMinute:minutes];
            [weekdayComponents setSecond:0];
            NSDate* result = [gregorian dateFromComponents:weekdayComponents];
            return result;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-06-27
          • 1970-01-01
          • 1970-01-01
          • 2013-02-24
          • 1970-01-01
          • 1970-01-01
          • 2012-08-30
          • 2013-07-04
          相关资源
          最近更新 更多