我正在使用以下代码仅从NSDate中提取日期。我做错了什么?
NSDate* now = [NSDate date];
NSLog(@"Now Date %@",now);
NSDateFormatter *format = [[NSDateFormatter alloc] init];
format.dateFormat = @"dd-MM-yyyy";
NSString *stringDate = [format stringFromDate:now];
NSDate *todaysDate = [format dateFromString:stringDate];
NSLog(@"Today's Date without Time %@", todaysDate);
日志:
2014-06-21 12:27:23.284 App[69727:f03] Now Date 2014-06-21 19:27:23 +0000
2014-06-21 12:27:23.285 App[69727:f03] Today's Date without Time 2014-06-21 07:00:00 +0000
为什么我会收到:07:00:00 +0000
最后?
我想以下列格式获得NSDate:
2014-06-21 00:00:00 +0000
0
的时间,秒等等并不重要。
答案 0 :(得分:5)
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd"];
NSDate *now = [[NSDate alloc] init];
NSString *theDate = [dateFormat stringFromDate:now];
应该有效
答案 1 :(得分:5)
另一个解决方案:使用NSCalendar:
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:1]]; // I'm in Paris (+1)
NSDateComponents *comps = [cal components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:[NSDate date]];
comps.hour = 0;
comps.minute = 0;
comps.second = 0;
NSDate *newDate = [cal dateFromComponents:comps ];
NSLog(@"date: %@",newDate);
调整时区参数,您将收到如下内容:日期:2014-06-21 00:00:00 +0000
答案 2 :(得分:3)
如果您不关心时间,NSDate不适合您。 NSDate表示特定时刻 - 没有时间没有NSDate。您所看到的是NSDate的已记录描述,这是GMT中的完整打印输出。
如果您只想跟踪年,月和日,那么请改用NSDateComponents,并仅提取您感兴趣的组件。然后您可以使用组件对象并根据需要传递它。
答案 3 :(得分:2)
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy"];
NSString *strDate = [dateFormatter stringFromDate:[NSDate date]];
使用上面的代码,NSDate对象将有时间。但该字符串将是仅限日期的文本。
答案 4 :(得分:0)
这是使用的代码。
#include <time.h>
- (NSDate *)dateFromISO8601String:(NSString *)string {
if (!string) {
return nil;
}
struct tm tm;
time_t t;
strptime([string cStringUsingEncoding:NSUTF8StringEncoding], "%Y-%m-%dT%H:%M:%S%z", &tm);
tm.tm_hour = 0;
tm.tm_min = 0;
tm.tm_sec = 0;
tm.tm_isdst = -1;
t = mktime(&tm);
return [NSDate dateWithTimeIntervalSince1970:t + [[NSTimeZone localTimeZone] secondsFromGMT]];
}
- (NSString *)ISO8601String:(NSDate*)aDate {
struct tm *timeinfo;
char buffer[80];
time_t rawtime = [aDate timeIntervalSince1970] - [[NSTimeZone localTimeZone] secondsFromGMT];
timeinfo = localtime(&rawtime);
strftime(buffer, 80, "%Y-%m-%dT%H:%M:%S%z", timeinfo);
return [NSString stringWithCString:buffer encoding:NSUTF8StringEncoding];
}
NSString *currentDateStr = [self ISO8601String:[NSDate date]];
NSDate *dateWithoutTime = [self dateFromISO8601String:currentDateStr];
NSLog(@"currentDateStr: %@",currentDateStr);
NSLog(@"dateWithoutTime: %@",dateWithoutTime);