2013-05-30 30 views
-3

我需要用formaT将NSString转换为NSDate。这里是我的代码:在我的iPhone应用程序中将NSString转换为NSDate

+(NSDate*)dateFromJsonString:(NSString*)string{ 

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'"]; 
    NSLog(@"%@", [dateFormat dateFromString:string]); 
    return [dateFormat dateFromString:string]; 


    } 

如果参数 “串” 是2013-05-30T15:53:02后转换 - [DATEFORMAT dateFromString:字符串]它成为2013年5月30日12时53分02秒+0000 ,所以3小时有差别。我该如何解决它?

回答

3

您需要设置正确的时区。下面是一个示例,它纠正你的服务器的时区:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; 
[dateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'"]; 
return [dateFormatter dateFromString:dict[@"completed_at"]]; 

编辑:您可以检查一类方法可用时区上NSTimeZone:

+ (NSArray *)knownTimeZoneNames 

只需将它输出到控制台,然后选择与服务器对应的时区。

编辑2:也许这是更为有用:

+ (NSDictionary *)abbreviationDictionary 

选择你的时区,并不仅仅是改变@"UTC"在上面的代码与所需的缩写。

+0

谢谢,但UTC意味着什么? – revolutionkpi

+1

UTC是GMT + 0的代码,即格林威治时区。 –

0

尝试这个dateFormat。由于时区未在dateString中给出,因此dateFormatter假定它是本地时区。如果您知道时区将其设置为格式化程序。

[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"]; 

检查this answer了解更多详情。

0

这是TimeZone的问题,所以使用此代码来解决这个问题:

+(NSDate*)dateFromJsonString:(NSString*)string 
    { 
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en-US"]; 

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'"]; 
    [dateFormat setLocale:locale]; 
    [dateFormat setTimeZone:[NSTimeZone systemTimeZone]]; 
    NSLog(@"%@", [dateFormat dateFromString:string]); 
    return [dateFormat dateFromString:string];  
    } 

希望它可以帮助你。

0

您只需要设置日期格式化程序的当前时区。正因为如此,你有一些时间差。使用下面的代码..

+(NSDate*)dateFromJsonString:(NSString*)string 
{ 
    NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init]; 
    [inputFormatter setTimeZone:[NSTimeZone defaultTimeZone]]; 
    [inputFormatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ss"]; 
    NSDate *xExpDate = [inputFormatter dateFromString:string]; 
    return xExpDate; 
} 
0

您可以使用下面的代码来设置时区。

[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; 

但你尝试之前,我应该告诉你,如果你正在登录的日期,它会显示它在UTC格式,而不是在你的电脑的时区。所以不要通过打印来检查你的日期。因此,请尝试将日期转换为字符串并打印,以检查日期是否正确。

尝试记录NSLog(@"%@",[dateFormatter stringFromDate:date]);第一个