Как получить сегодняшнюю дату в григорианском формате, когда телефона календарь не-грегорианский?

StackOverflow https://stackoverflow.com/questions/6355405

  •  28-10-2019
  •  | 
  •  

Вопрос

NSDate *now = [[NSDate alloc] init];  

дает текущую дату.

Однако, если календарь телефона не является григорианским (на эмуляторе также есть японский и буддийский), текущая дата не будет григорианской.

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

Благодарю вас!

Это было полезно?

Решение

NSDATE просто представляет собой момент времени и не имеет формата само по себе.

Чтобы форматировать NSDATE, например, на строку, вы должны использовать NSDateFormatter. Он имеет свойство календаря, и если вы установите это свойство на экземпляр григорианского календаря, выводимый формат будет соответствовать григорианскому стилю.

NSDate *now = [NSDate date];

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setCalendar:gregorianCalendar];
[formatter setDateStyle:NSDateFormatterFullStyle];
[formatter setTimeStyle:NSDateFormatterFullStyle];

NSString *formattedDate = [formatter stringFromDate:now];

NSLog(@"%@", formattedDate);

[gregorianCalendar release];
[formatter release];

Другие советы

Выбранный ответ на самом деле я не могу сравнить их. только дисплея недостаточно для моего проекта.

Я наконец -то придумал решение, которое Covert (NSDATE) CurrentDate -> GregoriandAte, тогда мы можем сравнить эти NSDATE.

Просто помните, что NSDATS следует использовать временно. (Это не прикрепляется ни с каким календарем)

    NSDate* currentDate = [NSDate date];

    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *gregorianComponents = [gregorianCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:currentDate];

    NSDateComponents *comps = [[NSDateComponents alloc] init];
    [comps setDay:[gregorianComponents day]];
    [comps setMonth:[gregorianComponents month]];
    [comps setYear:[gregorianComponents year]];
    [comps setHour:[gregorianComponents hour]];
    [comps setMinute:[gregorianComponents minute]];
    [comps setSecond:[gregorianComponents second]];


    NSCalendar *currentCalendar = [NSCalendar autoupdatingCurrentCalendar];
    NSDate *today = [currentCalendar dateFromComponents:comps];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top