Как получить сегодняшнюю дату в григорианском формате, когда телефонный календарь не является григорианским? - PullRequest
4 голосов
/ 15 июня 2011
NSDate *now = [[NSDate alloc] init];  

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

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

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

Спасибо!

Ответы [ 2 ]

14 голосов
/ 15 июня 2011

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];
1 голос
/ 25 июня 2014

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

Я наконец-то нашел решение, которое скрывает (NSDate) currentDate -> gregorianDate, тогда мы можем сравнить эти NSDates.

Просто помните, что NSDates должныиспользовать временно (не привязывать ни к какому календарю)

    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];
...