2010-12-02 66 views
1

我试图找到一种方法来将字符串转换为具有给定语言环境标识符的日期。 我有例如意大利日期(locale:it_IT)我想转换成有效的日期对象。从字符串与语言环境约会在iphone上sdk

NSDate *GLDateWithString(NSString *string, NSString *localeIdentifier) { 
    [NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4]; 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 

    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:localeIdentifier]; 
    [formatter setLocale:locale]; 
    [locale release]; 

    NSDate *date = [formatter dateFromString:string]; 
    [formatter release]; 

    return date; 
} 

此代码无效,日期为零。 我无法弄清楚我应该如何使用区域设置来达到我的目的。

+0

举一个例子字符串你正在使用。 – Anna 2010-12-02 12:45:04

+0

我在这里发布了解决方案和示例,谢谢。 – nebillo 2010-12-03 10:06:31

回答

0

我与德国格式,以及前一段时间的奋斗与通过提供自己的格式化字符串解决了这个问题:

[formatter setDateFormat:@"dd.MMM.yyyy HH:mm:ss"]; 

然后:

[dateFormatter dateFromString:@"01.Dez.2010 15:03:00"]; 

会得到一个正确的NSDate。

+0

当然这是有效的,但NSDateFormatter应该为我选择正确的日期格式,因为我设置了区域设置标识符。这是我的想法,也许我错了。 – nebillo 2010-12-02 14:42:52

1

的解决方案是使用getObjectValue:forString:范围:错误:NSDateFormatter方法,并设置正确的日期和时间样式的广告如下:

- (NSDate *)dateWithString:(NSString *)string locale:(NSString *)localeIdentifier { 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setTimeStyle:NSDateFormatterNoStyle]; 
    [formatter setDateStyle:NSDateFormatterShortStyle]; 

    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:localeIdentifier]; 
    [formatter setLocale:locale]; 
    [locale release]; 

    NSDate *date = nil; 
    NSRange range = NSMakeRange(0, [string length]); 
    NSError *error = nil; 
    BOOL converted = NO; 
    converted = [formatter getObjectValue:&date forString:string range:&range error:&error]; 
    [formatter release]; 

    return converted? date : nil; 
} 

例如:

NSString *italianDate = @"30/10/2010"; 
NSString *italianLocale = @"it_IT"; 

NSDate *date = [myCustomFormatter dateWithString:italianDate locale:italianLocale];