【发布时间】:2011-01-25 19:46:10
【问题描述】:
我有time 格式为string,例如2:00。我想用现有的date 将它初始化为NSDate。
我试过做
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setHour:2];
我无法将其与日期对象进行比较。请帮忙
【问题讨论】:
我有time 格式为string,例如2:00。我想用现有的date 将它初始化为NSDate。
我试过做
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setHour:2];
我无法将其与日期对象进行比较。请帮忙
【问题讨论】:
试试
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];
【讨论】:
要使用当前日期为 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];
【讨论】:
您需要使用NSCalendar 对象将NSDateComponents 转换为NSDate。请参阅 Apple 在 Creating a Date from Components 上的文档。
【讨论】:
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!
}
【讨论】:
只需将一些 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;
}
【讨论】: