我的应用程序使用[NSDate date]函数来获取当前日期.除了AM,每个月的第一天除外,其他工作都很好.即遵循以下步骤:
NSLog(@"Current Date :: %@",[NSDate date]);O/P是:: Current Date :: 2011-05-31 19:40:21 +0000
期望的O/P是::当前日期:: 2011-06-01 00:00:0(设定的时间)+0000
从早上6点起,它工作正常.
这是什么原因?
实际上我不想要字符串格式的NSDate,但我想要的是与当月第一个日期对应的NSDate日期对象.为此我使用以下代码片段:
NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSDateComponents *comp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit
| NSDayCalendarUnit) fromDate:[NSDatedate]];
[comp setDay:1];
NSDate *firstDayOfMonthDate = [gregorian dateFromComponents:comp];
[gregorian release];
return firstDayOfMonthDate;
Run Code Online (Sandbox Code Playgroud)
由于[NSDate date]返回错误的日期,因此组件也包含错误的日期.以上代码适用于所有senario,除了我在此主题开头发布的senario.我该怎么办?
您运行的是 iOS 版本 4.2 吗?如果是这样,则日期方法存在某种问题,它似乎不尊重您当地的时区。例如,如果我在 iOS 4.0 模拟器中运行您的代码,我会得到以下输出:
Current Date :: 2011-07-06 10:43:38 -0400
但如果我在 iOS 4.2 模拟器中运行它,我会得到:
Current Date :: 2011-07-06 14:44:18 +0000
这是另一篇 SO 帖子,更详细地描述了这一点:
如果您只是在 NSString 中查找当前日期和时间,我使用如下所示的代码来完成该任务:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setFormatterBehavior:NSDateFormatterBehavior10_4];
[formatter setDateStyle:NSDateFormatterShortStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
NSString *result = [formatter stringFromDate:[NSDate date]];
[formatter release];
NSLog(@"Current Date v2 :: %@",result);
Run Code Online (Sandbox Code Playgroud)