Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSDate组件中的NSDate问题_Ios_Objective C_Nsdate_Nsdateformatter_Nsdatecomponents - Fatal编程技术网

Ios NSDate组件中的NSDate问题

Ios NSDate组件中的NSDate问题,ios,objective-c,nsdate,nsdateformatter,nsdatecomponents,Ios,Objective C,Nsdate,Nsdateformatter,Nsdatecomponents,我有一个类似于2013-03-05T07:37:26.853的字符串,我想得到输出:2013-03-05 07:37:26。我希望在NSDate对象中获得最终输出。我使用下面的函数来转换期望输出。而且回来的时间不对 - (NSDate *) getDateFromCustomString:(NSString *) dateStr { NSArray *dateStrParts = [dateStr componentsSeparatedByString:@"T"]; NSStr

我有一个类似于
2013-03-05T07:37:26.853的字符串,我想得到
输出:2013-03-05 07:37:26
。我希望在
NSDate
对象中获得最终输出。我使用下面的函数来转换期望输出。而且回来的时间不对

-  (NSDate *) getDateFromCustomString:(NSString *) dateStr 
{    NSArray *dateStrParts = [dateStr componentsSeparatedByString:@"T"];
    NSString *datePart = [dateStrParts objectAtIndex:0];
    NSString *timePart = [dateStrParts objectAtIndex:1];
    NSArray *dateParts = [datePart componentsSeparatedByString:@"-"];
    NSArray *timeParts = [timePart componentsSeparatedByString:@":"];

NSDateComponents *components = [[NSDateComponents alloc] init];

[components setHour:[[timeParts objectAtIndex:0] intValue]];
[components setMinute:[[timeParts objectAtIndex:1] intValue]];
[components setSecond:[[timeParts objectAtIndex:2] intValue]];

[components setYear:[[dateParts objectAtIndex:0] intValue]];
[components setMonth:[[dateParts objectAtIndex:1] intValue]];
[components setDay:[[dateParts objectAtIndex:2] intValue]];


NSCalendar *currentCalendar = [NSCalendar currentCalendar];  
NSDate *date = [currentCalendar dateFromComponents:components];
NSLog(@"Date 1:%@",date); // Returns wrong time (2013-03-05 02:07:26)

/* i had tried the below.
NSDateFormatter * format = [[NSDateFormatter alloc] init];
[format setTimeZone:NSTimeZoneNameStyleStandard];
[format setDateFormat:@"yyyy-MM-dd hh:mm:ss"];

NSLog(@"Date 2:%@",[format stringFromDate:date]); // Returns correct date (2013-03-05 07:37:26)

NSDate *fDate = [format dateFromString:[format stringFromDate:date]];
DLog(@"Date 3:%@",fDate); // Returns wrong time (2013-03-05 02:07:26)
*/

[components release];
return  date;
}

如果有任何想法,请告诉我

你在这里看到的是一个时区问题。如果要记录正确的日期,我们需要为输入字符串提供一个GMT时区:

将此添加到代码中,看看会发生什么:

[components setTimeZone: [NSTimeZone timeZoneForSecondsFromGMT: 0]];
试试这个

    NSString *departTimeDate = @"2013-03-05T07:37:26.853";

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS"];

    NSDate *date = [dateFormatter dateFromString:departTimeDate];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    NSLog(@"Expected Result___ %@",[dateFormatter stringFromDate:date]); //2013-03-05 07:37:26

试试这个:问题是时区

+ (NSDate *) getDate:(NSString *) dateStr
{
    NSArray *dateStrParts = [dateStr componentsSeparatedByString:@"T"];
    NSString *datePart = [dateStrParts objectAtIndex:0];
    NSString *timePart = [dateStrParts objectAtIndex:1];

    NSString *t = [[timePart componentsSeparatedByString:@"."] objectAtIndex:0];
    NSString *newDateStr = [NSString stringWithFormat:@"%@ %@",datePart,t];
    //2013-03-05 07:37:26

    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    [df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSDate *date = [df dateFromString:newDateStr];
    DLog(@"%@",date);

    return  date;
}

-(NSDate*)getDateFromCustomString:(NSString*)dateStr{//输出:2013-03-05 07:37:26.NSArray*dateStrParts=[dateStr组件由字符串分隔:@“T0”];NSString*datePart1=[dateStrParts对象索引:0];NSString*timePart=[dateStrParts对象索引:1];NSArray*datepart2=[timePart componentsSeparatedByString:@.”;NSString*date1=datePart1;NSString*date2=[datepart2 objectAtIndex:0];NSLog(@“%@%”,date1,date2);}
NSDate
对象的NSLog始终以GMT显示日期。如果考虑到您的时区,日期/时间是否正确?为什么要去掉小数秒?只需将“.SSS”添加到第一个日期格式。感谢您提醒我,NSLog仅以GMT输出,@rmaddy