NSDateFormatter дает различные значения на устройстве и средстве моделирования? Что такое работа вокруг?

Если вы думаете о вызове сервиса, как о вызове любого другого метода, это может помочь в перспективе. Представьте, что каждый вызванный вами метод возвращает статус, и вы сами должны проверить, является ли он истинным или ложным. Это было бы довольно утомительно.

result = CallMethod();
if (!result.Success) handleError();

result = CallAnotherMethod();
if (!result.Success) handleError();

result = NotAgain();
if (!result.Success) handleError();

Это одна из сильных сторон структурированной системы обработки ошибок, это то, что вы можете отделить вашу фактическую логику от обработки ошибок. Вам не нужно постоянно проверять, вы знаете, что это был успех, если не было выброшено исключение.

try 
{
    CallMethod();
    CallAnotherMethod();
    NotAgain();
}
catch (Exception e)
{
    handleError();
}

В то же время, возвращая результат, вы возлагаете большую ответственность на клиента. Вы, возможно, знаете, что нужно проверять наличие ошибок в объекте результата, но Джон Доу входит и просто начинает вызывать ваш сервис, забывая, что что-то не так, потому что исключение не выдается. Это еще одна сильная сторона исключений в том, что они дают нам хорошую пощечину, когда что-то не так и о них нужно позаботиться.

5
задан Madhup Singh Yadav 26 November 2009 в 11:35
поделиться

2 ответа

NSDateFormatter форматирует дату в соответствии с предпочтениями пользователя на основе международных настроек устройства. Таким образом, вы никогда не можете ожидать, что эта строка будет согласованной из-за количества различных способов отображения дат во всем мире.

Я нашел лучший способ форматировать дату в виде строки (чтобы использовать ее для передачи веб-серверам и т. д.) заключается в использовании NSDateComponents и преобразовании их в строки.

3
ответ дан 18 December 2019 в 07:55
поделиться

Хотя другой упомянутый выше ответ технически верен, он не дает вам решения, которое вы ищете. Хотя NSDateFormatter по умолчанию использует пользовательские языковые стандарты (и поэтому не даст вам полезных результатов), вы можете запросить конкретный языковой стандарт для получения согласованных результатов:

NSDateFormatter *frm = [[NSDateFormatter alloc] init];
[frm setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];

NSLocale *en_US = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[frm setLocale:en_US];
[en_US release];
17
ответ дан 18 December 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: