Ios 将英语日期转换为意大利语日期

Ios 将英语日期转换为意大利语日期,ios,objective-c,nsdateformatter,Ios,Objective C,Nsdateformatter,2014年6月5日星期四12:57:52+0000,我通过推特API检索到了这样一个日期,我想转换成意大利风格:Giovedì5 Giugno 2014 是否可以使用NSDateFormatter,如果是,如何使用?是,请使用正确的格式和区域设置 NSString *localeIdentifier = @"en_US"; NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:localeIdentifier]; NSDat

2014年6月5日星期四12:57:52+0000,我通过推特API检索到了这样一个日期,我想转换成意大利风格:Giovedì5 Giugno 2014


是否可以使用NSDateFormatter,如果是,如何使用?

是,请使用正确的格式和区域设置

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

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];;
[dateFormatter setDateFormat:@"MMMM dd yyyy"];
[dateFormatter setLocale:locale];

NSString *formattedDateString = [dateFormatter stringFromDate:[NSDate date]];
本规范的结果将于2014年6月5日发布。如你所见,我使用的是en_US语言环境


这将为您创建意大利日期:

NSString *_dateInString = @"Thu Jun 05 12:57:52 +0000 2014";

NSDateFormatter *_dateFormatter = [[NSDateFormatter alloc] init];
[_dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_GB"]];
[_dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss Z yyyy"];
NSDate *_date = [_dateFormatter dateFromString:_dateInString];
[_dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"it_IT"]];
[_dateFormatter setDateFormat:@"EEEE d MMMM yyyy"];

NSLog(@"%@", [_dateFormatter stringFromDate:_date]);
控制台显示:

giovedì 5 giugno 2014
此外,如果您想更改月份名称或工作日名称,例如将其改为大写,您可以使用NSDateFormatter的以下方法我不会说意大利语,因此我将其留给会说意大利语的人:

-setWeekdaySymbols:
-setShortWeekdaySymbols:
-setVeryShortWeekdaySymbols:
-setStandaloneWeekdaySymbols:
-setShortStandaloneWeekdaySymbols:
-setVeryShortStandaloneWeekdaySymbols:

-setMonthSymbols:
-setShortMonthSymbols:
-setVeryShortMonthSymbols:
-setStandaloneMonthSymbols:
-setShortStandaloneMonthSymbols:
-setVeryShortStandaloneMonthSymbols:

你可以找到这些的官方文档。

先试试这个代码片段,我已经将给定的日期转换为英语日期,然后再转换为意大利语日期

NSString * yourJSONString = @"Thu Jun 05 12:57:52 +0000 2014";

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

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];;
[dateFormatter setDateFormat:@"EEEE MMMM dd HH:mm:ss Z yyyy"];
[dateFormatter setLocale:locale];

NSDate *dateFromString = [dateFormatter dateFromString:yourJSONString];
NSLog(@"%@", dateFromString);

NSString *localeIdentifier1 = @"it_IT";
NSLocale *locale1 = [[NSLocale alloc] initWithLocaleIdentifier:localeIdentifier1];

NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];;
[dateFormatter1 setDateFormat:@"EEEE d MMMM yyyy"];
[dateFormatter1 setLocale:locale1];

NSString *formattedDateString = [dateFormatter1 stringFromDate:dateFromString];
NSLog(@"%@", formattedDateString);

您正在使用[NSDate date],但正如我所写,我有一个字符串,而不是日期。类似这样的字符串Thu Jun 05 12:57:52+0000 2014。您可以使用NSDateFormatter和正确的日期格式将日期字符串反转为date。检查此项是的,可以使用NSDateFormatter。您能更好地解释它吗?不,问题,请在下面找到我的答案。LocaleIdentifier=itìu it和dateformatter的dateformat=EEEE dd MMMM yyyyy为什么您没有正确解析时区?我使用了这个EEEE dd MMMM yyyy,因为您希望输出为Giovedì5 Giugno 2014,这里dd用作日期可以是两位数字,例如,25格式化程序dd强制显示两个数字,如在5的情况下,它将是05,但单d始终只显示有价值的数字,不带前导零,因此在25的情况下,输出将是25。总的来说,25将与格式化程序d一起正确显示,但OP没有要求输出任何前导零。我没有与单d一起检查,但不确定25是否会使用单d正确显示,将对此进行检查并恢复回读可能Unicode技术标准35有助于了解这些格式化程序的工作原理,下面是它的链接:我在运行代码后直接从控制台保存了结果。你的问题是,我的小朋友,你必须将语言环境从意大利语设置为英语。否则,周或月的名称将无法解析,因为它们是用英语而不是意大利语编写的。