-3

在我的 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];


   }

如果参数 "string" 是 2013-05-30T15:53:02 转换后 - [dateFormat dateFromString:string] 它变成 2013-05-30 12:53:02 +0000 ,所以有 3 小时的差异。我该如何解决?

4

5 回答 5

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"使用所需的缩写更改上面的代码。

于 2013-05-30T13:05:41.830 回答
0

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

[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];

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

NSLog(@"%@",[dateFormatter stringFromDate:date]); 先尝试登录

于 2013-05-30T13:23:53.650 回答
0

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

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

检查此答案以获取更多详细信息。

于 2013-05-30T13:06:33.760 回答
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];    
   }

希望它可以帮助你。

于 2013-05-30T13:07:04.607 回答
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;  
 }
于 2013-05-30T13:12:23.637 回答