Как сделать nsdateformatter отображать конкретную дату локали?
Я использую NSDateFormatter для установки даты в моем приложении iPhone, и даты отображаются правильно. Тем не менее, я нахожу, что все локали (мое приложение поддерживает до 12 разных языков) придерживаются формата даты, который я указываю через setDateFormat. В идеале я хочу, чтобы формат даты отображался в форме, естественной для настройки региона для пользователя, вместо того, чтобы следовать моему формату (который хорошо работает для английского языка, но не может быть естественным для других локалей).
ниже мой код:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; [dateFormatter setDateFormat:@"MMMM dd, yyyy kk:mm:ss"]; self.creationDate.text = [dateFormatter stringFromDate:creationTimeStamp];
3 ответов
Я бы попробовал следующее NSDateFormatter
API вместо:
+ (NSString *)localizedStringFromDate:(NSDate *)date
dateStyle:(NSDateFormatterStyle)dateStyle
timeStyle:(NSDateFormatterStyle)timeStyle;
вот так:
self.creationDate.text = [NSDateFormatter localizedStringFromDate:creationTimeStamp
dateStyle:NSDateFormatterMediumStyle
timeStyle:NSDateFormatterShortStyle];
Это должно дать вам выход, который вы ищете, немного привести в порядок код и избавить вас от необходимости управлять какой-то ложной памятью.
нашел решение. Ключ не звонить setDateFormat
вообще, и API в iPhone автоматически выберет подходящую вещь для отображения на основе того, что указано в setDateStyle
и setTimeStyle
.
автономное решение с дизайном @fbrereto:
static NSString *FormatDate(NSDate *date)
{
return [NSDateFormatter localizedStringFromDate:date
dateStyle:NSDateFormatterMediumStyle
timeStyle:NSDateFormatterNoStyle];
}
теперь вы можете просто запустить:
NSString *formattedDate = FormatDate([NSDate new]);