简体   繁体   中英

NSDateFormatter locale is not working

I am using the following code to get the NSString from date

NSDateFormatter *df = [[NSDateFormatter alloc] init];
df.dateStyle = kCFDateFormatterLongStyle;
df.timeStyle = kCFDateFormatterNoStyle;
df.doesRelativeDateFormatting = YES;
[df setLocale:[NSLocale currentLocale]];
[df  setTimeZone:[NSTimeZone systemTimeZone]];
NSString *dateString=[df stringFromDate:myDate];

But it displaying like 'Today','Yesterday' even after changing Locale.I want to display the localized language of that also ?

I used your code and created this:

NSDate *yesterday;
NSTimeInterval interval;

NSCalendar *cal = [NSCalendar currentCalendar];

[cal rangeOfUnit:NSDayCalendarUnit
       startDate:&yesterday
        interval:&interval
         forDate:[NSDate date]];

yesterday = [yesterday dateByAddingTimeInterval:-interval];



NSDateFormatter *df = [[NSDateFormatter alloc] init];
df.dateStyle = kCFDateFormatterLongStyle;
df.timeStyle = kCFDateFormatterNoStyle;
df.doesRelativeDateFormatting = YES;

[@[[NSLocale localeWithLocaleIdentifier:@"de_DE"], [NSLocale localeWithLocaleIdentifier:@"es_ES"],[NSLocale localeWithLocaleIdentifier:@"en_US"]] enumerateObjectsUsingBlock:^(NSLocale *locale, NSUInteger idx, BOOL *stop) {
    [df setLocale:locale];
    [df  setTimeZone:[NSTimeZone systemTimeZone]];
    NSString *dateString=[df stringFromDate:yesterday];
    NSLog(@"%@", dateString);
}];

It outputs correctly

Gestern
ayer
Yesterday

Your problem must lay else-where.

Tested within a command-line program


Make sure that after you changed the language on device/simulator you kill the app completely before you open it again.

Hi I write this Function for LocalTime it Takes input of date as String and covert to Local Time String. May it help you

+(NSString*)LocalTimeWitheDateString:(NSString*)dateString{
    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
    NSTimeZone *timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
    [formatter setTimeZone:timeZone];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSDate *date =[formatter dateFromString:dateString];
    NSTimeZone *localTimeZone = [NSTimeZone localTimeZone];
    [formatter setTimeZone:localTimeZone];
    NSString *LnewTimeZoneDateString = [formatter stringFromDate:date];
    return LnewTimeZoneDateString;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM