从NSString转换为NSDate时获取Nil Date

时间:2015-05-29 12:41:28

标签: ios nsdate nsdateformatter nstimezone

在哥伦比亚使用该应用程序时,将NSString转换为NSDate的日期为nil,但在印度工作正常。没有得到确切的解决方案。有人可以帮忙吗?

我正在使用此代码

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"dd-MM-yyyy"]; 
NSString *newDateString = [dateFormatter stringFromDate:[NSDate date]]; 
NSString *dateString = [NSString stringWithFormat:@"%@ %@",newDateString,@"08:00:00"]; 
NSDateFormatter *dateFormatterToSaveDate = [[NSDateFormatter alloc] init];
[dateFormatterToSaveDate setDateFormat:@"dd-MM-yyyy HH:mm:ss"]; 
NSDate *dateToSave = [[NSDate alloc] init]; 
dateToSave = [dateFormatterToSaveDate dateFromString:dateString];

4 个答案:

答案 0 :(得分:0)

试试这段代码: NSString到NSDate

NSString *dateString = @"01-02-2010 05:30:00";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
NSDate *dateFromString = [[NSDate alloc] init];

dateFromString = [dateFormatter dateFromString:dateString];

答案 1 :(得分:0)

我认为这是一个区域设置问题,它与iOS 7中的NSDateFormatter字符串相同,只是相反。

尝试将区域设置设置为en_US或currentLocale

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
or

NSLocale *locale = [NSLocale currentLocale];

答案 2 :(得分:0)

您要转换的日期字符串在哪里?用户输入? D b?其他一些网络服务?

字符串是固定格式(即来自db / web服务),在这种情况下,您需要使用固定格式转换它,或者字符串是用户输入,因此将在用户所在的语言环境中所以你需要用用户区域设置转换它。

答案 3 :(得分:0)

这可能是因为设备的时间格式和时间格式之间存在差异。你的约会对象的时间格式。尝试设置正确的时区&区域设置。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSTimeZone *timeZone = [NSTimeZone localTimeZone];
[formatter setTimeZone:timeZone];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
[formatter setLocale:locale];

来自docs

  

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

     

将en_US_POSIX设置为日期格式化程序的区域设置后,即可   然后可以设置日期格式字符串,日期格式化程序将表现   始终如一地为所有用户。