我已经使用美国的regiorn格式测试了我的应用,并且日期显示正确。当地区更改为我现在居住的意大利时,其中包含null值。

我的起始字符串日期是:
-“2013年5月2日下午6:46:33”

结果日期正确为:
-“02/05/2013 18:46:33”

这是我的代码:

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
 dateFormatter setDateFormat:@"MM dd, yyyy hh:mm:ss a"];


 NSDate *dateFromString;
 dateFromString = [dateFormatter dateFromString:dataStr];

 [dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
 dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];


 NSString *stringFromDate  = [dateFormatter stringFromDate:dateFromString];

最佳答案

如果您的起始字符串是May 2, 2013 6:46:33 PM,则有两个问题:

  • 您的格式字符串MM dd, yyyy hh:mm:ss a与您的字符串不匹配。它必须是MMMM dd, yyyy hh:mm:ss aMM的使用适用于数字月份。缩写月份名称使用MMM,完整月份名称使用MMMM
  • 您的日期字符串具有英语的月份名称。如果您的设备设置为意大利,则它将无法正确解析月份名称,因为它将期望月份名称为意大利语。

  • 您的代码应为:
    NSString *dateStr = @"May 2, 2013 6:46:33 PM";
    NSDateFormatter *inputDateFormatter = [[NSDateFormatter alloc] init];
    [inputDateFormatter setDateFormat:@"MMMM dd, yyyy hh:mm:ss a"];
    [inputDateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
    
    NSDate *dateFromString = [inputDateFormatter dateFromString:dataStr];
    
    NSDateFormatter *outputDateFormatter = [[NSDateFormatter alloc] init];
    [outputDateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
    
    NSString *stringFromDate  = [outputDateFormatter stringFromDate:dateFromString];
    

    关于ios - IOS:NSDateFormatter用于意大利的区域格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16343595/

    10-09 08:38