从dateFromString方法返回的日期

时间:2013-08-20 11:42:37

标签: ios objective-c ios6 nsdate ios6.1

请帮我解决问题。

(objValidation.aRange.MinimumValue,objValidation.aRange.MaximumValue的值来自Web服务)

(我在firstDate,secondDate中的日期错误。)

NSDateFormatter *df  = [[NSDateFormatter alloc] init];
                [df setDateFormat:@"MM/dd/yyyy"];
                [df setTimeZone:[NSTimeZone localTimeZone]];
                NSDate *myDate = [df dateFromString:inputString];
                [df setDateFormat:@"MM/dd/yyyy"];
                NSLog(@"objValidation.aRange.MinimumValue : %@,objValidation.aRange.MaximumValue :%@, inputString : %@",objValidation.aRange.MinimumValue,objValidation.aRange.MaximumValue,inputString);
                NSDate *firstDate = [df dateFromString:objValidation.aRange.MinimumValue];
                NSDate *secondDate = [df dateFromString:objValidation.aRange.MaximumValue];
                NSLog(@"myDate : %@,firstDate :%@, secondDate : %@",myDate,firstDate,secondDate);
                [df release];

输出:

objValidation.aRange.MinimumValue : 8/20/2013
objValidation.aRange.MaximumValue :12/31/9999
inputString : 08/22/2013 
myDate : 2013-08-21 18:30:00 +0000
firstDate :2013-08-19 18:30:00 +0000
secondDate : 1999-12-30 18:30:00 +0000 

2 个答案:

答案 0 :(得分:2)

重新调整的日期是正确的,但您没有考虑时区。

所有NSDate对象都没有时区。因此,当您解析日期时,将使用系统时区。

答案 1 :(得分:-3)

试用此代码:

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MM/dd/yyyy"];
NSDate *date = [df dateFromString:@"8/20/2013"];
NSTimeZone *currentTimeZone = [NSTimeZone localTimeZone];
NSTimeZone *utcTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
NSInteger currentGMTOffset = [currentTimeZone secondsFromGMTForDate:date];
NSInteger gmtOffset = [utcTimeZone secondsFromGMTForDate:date];
NSTimeInterval gmtInterval = currentGMTOffset - gmtOffset;
NSDate *destinationDate = [[NSDate alloc] initWithTimeInterval:gmtInterval sinceDate:date];
NSLog(@"DateString : %@", destinationDate);

您将获得所需的确切输出。