我试图使用此代码从今天的日期开始单独(没有时间)获取日期:
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 pm,但结果显示有一天休息和一些随机时间。
我的预期结果是2014-10-14 00:00:00
,因为我需要将此日期与其他日期进行比较。我将从服务中获取产品的到期日期,如果日期小于或等于当前日期,我需要在“过期产品”部分中显示产品。我可以使用NSDate
的比较方法来比较这两个日期。
答案 0 :(得分:1)
NSDate始终是UTC(通用时间)的时间点。
您已 当前时间。
您使用印度日历提取年,月和日,以便获得您期望的值。
您将这些组件转换为NSDate。这给出了印度 天开始时的时间点。因为距离UTC只有5个半小时,所以UTC的那个时间点将是前一天的18:30。换句话说,如果你在一天开始时(午夜)打电话给我,我看了我的日历和手表,我的日历会显示前一天,我的手表会显示18:30。
这就是NSLog显示的内容。 NSDate绝对正确;根据您的日历, 是一天的开始。您的一天从UTC时间18:30开始。
答案 1 :(得分:0)
要使用NSDateFormatter
方法获取带有日期的字符串,请使用startOfDayForDate
方法:OSX 10.9和iOS 8.0中提供NSDate *date = [NSDate date];
NSLog(@"date: %@", date);
NSDate *dateOnlyString = [[NSCalendar currentCalendar] startOfDayForDate:date];
NSLog(@"dateOnlyString: %@", dateOnlyString);
。
示例:
NSLog
输出:
date: 2014-10-14 18:11:43 +0000 dateOnlyString: 2014-10-14 04:00:00 +0000
但真正的问题可能是NSDate
使用description
NSDateFormatter
方法。这会根据您可能不需要的几个条件显示日期/时间。如果要以特定格式查看日期,请使用{{1}}创建显示字符串。