Rel*_*lex 12 objective-c nsdate ios
当我的应用程序启动时,我想检查日期是否在9:00-18:00之间.
我现在可以使用时间NSDate
.我该如何查看时间?
Fab*_*ser 19
如此多的答案和许多缺陷......
您可以使用NSDateFormatter
以从日期获取用户友好的字符串.但是使用该字符串进行日期比较是一个非常糟糕的主意!
请忽略您的问题的任何答案,涉及使用字符串...
如果您想获得有关日期年,月,日,小时,分钟等的信息,您应该使用NSCalendar
和NSDateComponents
.
要检查日期是否在9:00到18:00之间,您可以执行以下操作:
NSDate *date = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [calendar components:NSHourCalendarUnit fromDate:date];
if (dateComponents.hour >= 9 && dateComponents.hour < 18) {
NSLog(@"Date is between 9:00 and 18:00.");
}
Run Code Online (Sandbox Code Playgroud)
编辑:
哎呀,使用dateComponents.hour <= 18
将导致18:01等日期的错误结果.dateComponents.hour < 18
是要走的路.;)
构建今天的09:00和18:00的日期,并将当前时间与这些日期进行比较:
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *now = [NSDate date];
NSDateComponents *components = [cal components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:now];
[components setHour:9];
[components setMinute:0];
[components setSecond:0];
NSDate *nineHundred = [cal dateFromComponents:components];
[components setHour:18];
NSDate *eighteenHundred = [cal dateFromComponents:components];
if ([nineHundred compare:now] != NSOrderedDescending &&
[eighteenHundred compare:now] != NSOrderedAscending)
{
NSLog(@"Date is between 09:00 and 18:00");
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
781 次 |
最近记录: |