IOS:NSDateFormatter用于区域格式意大利

时间:2013-05-02 16:54:49

标签: ios format nsdateformatter region

我已经使用regiorn format USA测试了我的应用程序并且日期显示正确。当地区改​​为我居住的意大利时,现在包含空值。

我的首发字符串日期为:      - “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];

2 个答案:

答案 0 :(得分:2)

如果您的初学者字符串为May 2, 2013 6:46:33 PM,那么您有两个问题:

  1. 您的格式字符串MM dd, yyyy hh:mm:ss a与您的字符串不匹配。它必须是MMMM dd, yyyy hh:mm:ss aMM的使用是数月。使用MMM表示缩写的月份名称,并使用MMMM表示完整的月份名称。
  2. 您的日期字符串包含英文月份名称。如果您的设备是为意大利设置的,那么它将无法正确解析月份名称,因为它会预期月份名称为意大利语。
  3. 您的代码应为:

    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];
    

答案 1 :(得分:0)

使用此:

NSDate* sourceDate = your_date
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;

NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];

希望它对你有所帮助。