Как получить сегодняшнюю дату в григорианском формате, когда телефона календарь не-грегорианский?
-
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];