0

实际上在我的模拟器中,时间显示过去 5 小时 30 分钟

我目前在印度的时间是 2013-04-02 09:10:__ AM但输出是 2013-04-02 03:54:51 +0000

2013 年 - 4 月 - 2 日:上午 9:10

我需要在两个日期之间得到一些结果 1.First Date of Month 到 2.Current Date of any day

即从 4 月 1 日到 4 月 2 日 9.10 AM t0 当前时间 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

提前致谢

4

4 回答 4

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];
于 2013-04-02T05:36:43.527 回答
0

正如 Sunny 所说,问题在于时区,以及对 NSDate 实际含义的误解。

NSDate 表示在世界各地都相同的时间点。如果我们同时调用 [NSDate date] ,我们会得到相同的结果,并且 NSLog 以相同的方式打印它。但是,如果我们都看我们的手表,我们会看到显示的时间不同。

你在印度。如果您正好在午夜看表,它显示的是中午 12 点。如果伦敦的一个人在完全相同的时间看他们的手表,那个人就会看到下午 6:30。他们的手表总是比你的晚 5 1/2 小时。这就是 NSLog 显示的内容。

例如,您正确计算了印度月初的 NSDate。这个月初是 4 月 1 日,在一天开始的午夜——在印度时间。但此时此刻,仍是伦敦的 3 月 31 日,18:30。这就是 NSDate 显示的内容。你总是得到正确的结果。

于 2014-05-07T16:39:29.007 回答
0

问题时区。默认情况下, NSDateFormatter 设置为您的本地时区。这意味着,如果您的时区是 +5:30,则给它一个日期“1970/18/3”会导致 1970-03-18 00:00:00 +0530。但是,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]);
于 2013-04-02T05:25:10.510 回答
-1

@IOS 开发者,

可能是时区问题。检查您的模拟器设置。使用以下链接:

xcode 4.2 位置模拟器和时区 还要检查 [NSTimeZone localTimeZone].

见以下链接:

NSTimeZone:localTimeZone 和 systemTimeZone 有什么区别?

于 2013-04-02T03:58:43.303 回答