【问题标题】:Conversion of NSString to NSDate failingNSString 到 NSDate 的转换失败
【发布时间】:2012-10-20 14:40:45
【问题描述】:

我有以下代码..

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM/dd/YYYY HH:mm"];
NSString *dateString = @"10/27/2012 18:00";
NSDate *parsedDate = [dateFormatter dateFromString:dateString] ;
NSLog(@"Parsed Date.. %@",[parsedDate description]);

我得到的 NSLog 语句为 Parsed Date.. 2011-12-25 00:00:00 +0000。我将不胜感激任何帮助解决这个问题。我只想将该 NSString 转换为其 NSDate 等效项。也尝试使用 NSTimeZone,但没有效果。我在这里错过了什么?

【问题讨论】:

    标签: ios nsdate nsdateformatter


    【解决方案1】:

    您需要使用小写年份表示,yyyy 而不是YYYY:

    [dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm"];
    

    如果您想获得正确的时区,您需要设置NSDateFormatter 的时区。默认情况下,它使用您设备的时区。对于格林威治标准时间,请使用以下内容。

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
    [dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm"];
    NSString *dateString = @"10/27/2012 18:00";
    NSDate *parsedDate = [dateFormatter dateFromString:dateString] ;
    NSLog(@"Parsed Date.. %@",[parsedDate description]);
    

    【讨论】:

    • 你应该接受这个答案,他解决了你的问题。查看文档以了解时区格式。
    【解决方案2】:

    您使用的格式字符串不正确。见the documentation。基本上,资本YYYY 是“一年中的一周”。尝试改用小写的yyyy,即

    [dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm"];
    

    【讨论】:

    • 不错。这适用于日期就好了,但是对于我得到 ​​Parsed Date.. 2012-10-27 12:30:00 +0000 的时间我应该使用时区格式吗?或者我可以不这样做吗?
    猜你喜欢
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2012-08-03
    • 1970-01-01
    • 2011-11-25
    相关资源
    最近更新 更多