NSDateFormatter dateFromString为零

时间:2015-06-29 07:34:26

标签: ios nsdate nsdateformatter

我知道问题已经存在,但给出的答案并没有帮助我。

生日具有以下价值: 2013年6月29日,上午8:45

这是我的代码:

NSDate* now = [[NSDate alloc] init];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setLocale:[NSLocale currentLocale]];
[dateFormatter setFormatterBehavior:NSDateFormatterBehaviorDefault];
NSDate *birthdayDate = [dateFormatter dateFromString:birthday];

NSLog(@"%@", birthdayDate);

birthdayDate总是零

我该怎么办?

1 个答案:

答案 0 :(得分:1)

  

如果您使用的是固定格式的日期,则应首先将日期格式化程序的区域设置设置为适合您的固定格式的区域设置。在大多数情况下,最佳选择的语言环境是en_US_POSIX,这是一种专门设计用于产生美国英语结果的语言环境,无论用户和系统偏好如何。 en_US_POSIX在时间上也是不变的(如果美国,在未来的某个时刻,它会改变格式化日期的方式,en_US将改变以反映新行为,但en_US_POSIX将不会),以及平台之间(en_US_POSIX在iPhone上的工作方式相同)操作系统与OS X一样,与其他平台上的操作系统一样。)

// String to Date
NSString *birthday = @"Jun 29, 2013, 8:45 AM";

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMM dd, yyyy, HH:mm a"];
dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
// Setting the locale to POSIX ensures that
// the user's locale won't be used
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSDate *birthdayDate = [dateFormatter dateFromString:birthday];

NSLog(@"birthdayDate:%@", birthdayDate);

// Date to String
[dateFormatter setLocale:[NSLocale currentLocale]];
dateFormatter.timeZone = [NSTimeZone systemTimeZone];
NSString *originalBirthday = [dateFormatter stringFromDate:birthdayDate];

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