NSDateFormatter未转换为正确的日期

时间:2014-06-23 11:37:41

标签: ios date nsdateformatter

我在将字符串日期转换为NSDate时遇到问题,因为转换不正确。这是我的代码:

NSString *stringDate = @"6/20/2014 8:38:52 PM";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM/dd/yyyy hh:mm:ss a"];

NSDate *timeStamp = [dateFormatter dateFromString:stringDate];

日志总是显示TIMESTAMP: 2014-06-20 12:38:37 +0000

如何将其转换为正确的日期?提前谢谢。

3 个答案:

答案 0 :(得分:1)

我相信你这样做是为了在日志中显示日期:

NSLog(@"timeStamp = %@", timeStamp);

而是保持日期格式化(全局存储或其他东西)并执行:

NSLog(@"timeStamp = %@", [dateFormatter stringFromDate:timeStamp]);

区别在于第一行代码调用[NSDate description]来格式化日期,它使用UTC / GMT时区,其中第二行代码使用日期格式化程序中配置的时区(默认情况下)与区域设置的时区相同,并且至少与您用于解析字符串的时区相同。

答案 1 :(得分:0)

添加

[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];

你在UTC时区得到日期。

答案 2 :(得分:0)

You can use this. It will give you proper output
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    [dateComponents setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    [dateComponents setYear:2014];
    [dateComponents setMonth:6];
    [dateComponents setDay:20];
    [dateComponents setHour:8];
    [dateComponents setMinute:38];
    [dateComponents setSecond:52];
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDate *date = [calendar dateFromComponents:dateComponents];

    //NSDate *timeStamp = [dateFormatter dateFromString:stringDate];
    NSLog(@"date = %@",date);
//solutions[2247:70b] date = 2014-06-20 08:38:52 +0000 printing date