NS当天开始的日期打印为前一天的下午晚些时候



我试图使用以下代码从今天的日期中单独获取日期(没有时间):

NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *date1Components = [cal components: NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:[NSDate date]];
NSLog(@"Today without time :%@",[cal dateFromComponents:date1Components]);

结果是:

2014-10-14 23:01:13.398 TestViewHier〔5349:60b〕今天没有时间:2014-10-13 18:30:00+0000

我来自印度,现在的时间是:2014-10-14下午11:16,但结果显示休息一天,还有一些随机的时间。

我的预期结果是2014-10-14 00:00:00,因为我需要将此日期与另一个日期进行比较。我将从服务中获取产品的有效期,如果该日期小于或等于当前日期,我需要在"过期产品"部分显示产品。我可以用NSDate的比较方法来比较这两个日期。

NSDate始终是UTC(世界时)中的一个时间点。

您占用了您的当前时间。

您可以使用印度日历提取年、月和日,从而获得您所期望的值。

您可以将这些组件转换为NSDate。这为您在印度的一天的开始提供了一个时间点。因为您距离UTC还有5个半小时,所以UTC的时间点将是前一天18:30。换句话说,如果你在一天开始(午夜)给我打电话,我看了看日历和手表,我的日历会显示前一天,手表会显示18:30。

这就是NSLog显示的内容。NSDate是绝对正确的;根据您的日历,它是一天的开始。您的一天从协调世界时18:30开始。

要获取包含日期而不包含时间的字符串,请使用NSDateFormatter方法:在OSX 10.9和iOS 8.0中提供startOfDayForDate

示例:

NSDate *date = [NSDate date];
NSLog(@"date:           %@", date);
NSDate *dateOnlyString = [[NSCalendar currentCalendar] startOfDayForDate:date];
NSLog(@"dateOnlyString: %@", dateOnlyString);

输出:

日期:2014-10-14 18:11:43+000dateOnlyString:2014-10-14 04:00:00+0000

但真正的问题可能是NSLog使用了NSDate description方法。根据您可能不想要的几个条件显示日期/时间。如果要查看特定格式的日期,请使用NSDateFormatter创建显示字符串。

最新更新