实际上在我的模拟器中,TIME显示过去5小时30分钟
我目前在印度的时间是2013-04-02 09:10:__ AM 但输出是2013-04-02 03:54:51 +0000
2013- 4月 - 2月:上午9:10
我需要在两个日期之间得到一些结果1.每月的第一个日期到2.当天的任何日期
即4月1日至4月2日上午9点10分当前时间2013-04-02 09:10:__ AM
但显示
2013年第一天的日期 - 03-31 18:30:00 +0000
当前时间为2013- 04-02 03:54 :51 +0000 但实际时间是09:10:__ AM
我按如下方式计算当月的第一个日期
// TO IMPLEMENT CODE for FIRST DAY OF the Month
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* comps = [calendar components:NSYearForWeekOfYearCalendarUnit |NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:[NSDate date]];
calendar.timeZone = [NSTimeZone systemTimeZone];
[comps setWeekday:1]; // 1: sunday
monthComponent = comps.month;
yearComponent = comps.year;
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy MM dd"];
dateFormatter.timeZone = [NSTimeZone systemTimeZone];
// To get the firstDateOfMonth for This MONTH.
NSDate *firstDateOfMonth = [dateFormatter dateFromString:[NSString stringWithFormat:@"%d %d 01",yearComponent,monthComponent]];
NSLog(@"firstDateOfMonth-- %@ \r\n",firstDateOfMonth);
NSLog(@"[NSDate date]-- %@",[NSDate date]);
我设置时区SystemTimeZone甚至认为 i got wrong results for Current date and firstDateOfMonth
提前致谢
答案 0 :(得分:0)
问题时区。 默认情况下,NSDateFormatter设置为您的本地时区。这意味着,如果您的时区是+5:30,则在1970-03-18 00:00:00 +0530之间给出日期“1970/18/3”。但是,NSLog始终以GMT(零)时区打印日期,添加/减去时区差异(5小时30分钟)。
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* comps = [calendar components:NSYearForWeekOfYearCalendarUnit |NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:[NSDate date]];
[comps setWeekday:1];
int monthComponent = comps.month;
int yearComponent = comps.year;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy MM dd"];
NSDate *firstDateOfMonth = [dateFormatter dateFromString:[NSString stringWithFormat:@"%d %d 01",yearComponent,monthComponent]];
firstDateOfMonth = [firstDateOfMonth dateByAddingTimeInterval:19800];
NSLog(@"firstDateOfMonth-- %@ \r\n",firstDateOfMonth);
NSLog(@"[NSDate date]-- %@",[[NSDate date] dateByAddingTimeInterval:19800]);
答案 1 :(得分:0)
试试吧......
NSDate* date = [NSDate date];
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
NSTimeZone *destinationTimeZone = [NSTimeZone systemTimeZone];
formatter.timeZone = destinationTimeZone;
[formatter setDateStyle:NSDateFormatterLongStyle];
[formatter setDateFormat:@"MM/dd/yyyy hh:mma"];
NSString* dateString = [formatter stringFromDate:date];
答案 2 :(得分:0)
正如Sunny所说,问题是时区,加上对NSDate实际意味着什么的误解。
NSDate代表世界各地的时间点。如果我们在同一时刻调用[NSDate date],我们会得到相同的结果,并且NSLog以相同的方式打印它。但是,如果我们都看看我们的手表,我们会看到不同的时间。
你在印度。如果你正好在午夜看你的手表,它会显示在下午12点。如果伦敦的一个人在同一时刻看他们的手表,那个人将会在下午6:30看到。他们的手表总是比你的手表晚5个半小时。这就是NSLog显示的内容。
例如,您在印度正确计算了本月初的NSDate。本月初是在印度时间4月1日,当天午夜的午夜。但在那个时刻,它仍然是伦敦3月31日18:30。这就是NSDate所展示的。你总是得到正确的结果。
答案 3 :(得分:-1)
@IOS dev,
可能是时区问题。检查您的模拟器设置。使用以下链接:
xcode 4.2 location simulator and Time Zone
另请查看[NSTimeZone localTimeZone]
。
见以下链接:
NSTimeZone: what is the difference between localTimeZone and systemTimeZone?