从[NSDate日期]获取当前日期,但将时间设置为上午10:00

71 iphone nsdate ipad

如何重置从[NSDate date]检索的当前日期,然后将时间更改为早上10:00.

Mat*_*uch 196

与所有日期操作一样,您必须使用NSDateComponentsNSCalendar

NSDate *now = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSCalendarIdentifierGregorian];
NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];
[components setHour:10];
NSDate *today10am = [calendar dateFromComponents:components];
Run Code Online (Sandbox Code Playgroud)

在iOS8中,Apple推出了一种方便的方法,可以节省几行代码:

NSDate *d = [calendar dateBySettingHour:10 minute:0 second:0 ofDate:[NSDate date] options:0];
Run Code Online (Sandbox Code Playgroud)

迅速:

let calendar: NSCalendar! = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
let now: NSDate! = NSDate()

let date10h = calendar.dateBySettingHour(10, minute: 0, second: 0, ofDate: now, options: NSCalendarOptions.MatchFirst)!
Run Code Online (Sandbox Code Playgroud)

  • 答案是在2011年写的.请随意检查和编辑我的其他1093个答案.他们中的许多人可能需要一点现代化.;-) (64认同)
  • 你错了Valeriy,实际上是2015年. (18认同)
  • 投票了.但是,请从您的代码中删除自动释放.这是2014年. (10认同)
  • 请注意,不推荐使用NSYearCalendarUnit,NSMonthCalendarUnit和NSDayCalendarUnit.请使用NSCalendarUnitYear,NSCalendarUnitMonth和NSCalendarUnitDay.否则我们可能会获得一些垃圾日期值. (3认同)
  • 我的上帝,我确定这是新答案) (2认同)