Кажется, простая вещь, но я не могу найти способ сделать это.
Было бы здорово увидеть пару разных методов.
Кажется, простая вещь, но я не могу найти способ сделать это.
Было бы здорово увидеть пару разных методов.
Ответы:
@ Ответ Чака правильный и привел меня к следующему коду. Думал поделиться:
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:10];
[comps setMonth:10];
[comps setYear:2010];
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:comps];
Вы можете использовать это
NSString *dateString = @"03-Sep-11";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd-MMM-yy";
NSDate *date = [dateFormatter dateFromString:dateString];
Надеюсь, это поможет вам.
Примеры часто - самый простой способ выучить. Вот несколько примеров.
Этот самый простой.
let currentDateTime = Date()
// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 2017
dateComponents.month = 2
dateComponents.day = 20
// Create date from components
let userCalendar = Calendar.current // user calendar
let dateThisPostWasUpdated = userCalendar.date(from: dateComponents)
// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 1976
dateComponents.month = 4
dateComponents.day = 1
// Create date from components
let userCalendar = Calendar.current // user calendar
let appleFoundedDate = userCalendar.date(from: dateComponents)
Есть и другие способы создания свиданий. Если вы хотите узнать об этом, а также о том, как отображать дату, посмотрите мой более полный ответ .
См. Документацию для NSDate . Вы можете использовать dateFromString:
метод NSDateFormatter
или dateFromComponents:
метод NSCalendar
.
init
?
Я нашел эту ветку, когда искал ответ на этот вопрос, но затем я нашел хороший пример в одной моей книге по программированию Big Nerd Ranch Objective-C. Спасибо им, а не мне.
NSDateComponents *myBDay =[[NSDateComponents alloc] init];
[myBDay setDay:22];
[myBDay setMonth: 04];
[myBDay setYear: 1984];
[myBDay setHour:9];
[myBDay setMinute:25];
[myBDay setSecond:35];
NSCalendar *g = [[ NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *dateOfBirth = [g dateFromComponents:myBDay];
Смешно, правда?
В середине 2013 года Apple до сих пор не предоставила простого способа установить значение NSDate.
Во время моего текущего проекта iPad я не мог поверить, что мне пришлось на время прекратить продуктивность, чтобы написать собственный вспомогательный класс, чтобы получить значение года из NSDate. Я имею в виду, давай, это основные вещи.
В любом случае, вот вспомогательный класс, который я использовал в своем проекте для преобразования строки в значение NSDate:
@implementation DateHelper
+(NSDate*)parseDateString:(NSString *)dateString
{
NSDateFormatter *rfc3339TimestampFormatterWithTimeZone = [[NSDateFormatter alloc] init];
[rfc3339TimestampFormatterWithTimeZone setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
[rfc3339TimestampFormatterWithTimeZone setDateFormat:@"MMM dd, yyyy"];
NSDate *theDate = nil;
NSError *error = nil;
if (![rfc3339TimestampFormatterWithTimeZone getObjectValue:&theDate forString:dateString range:nil error:&error]) {
NSLog(@"Date '%@' could not be parsed: %@", dateString, error);
}
return theDate;
}
@end
Используя этот код, вы можете установить значение NSDate, используя что-то вроде:
NSDate* date = [DateHelper parseDateString:@"Jul 16, 2013"];
Примечание: эта функция была основана на коде, взятом отсюда: https://stackoverflow.com/a/3968411/391605
Мое решение заключалось в использовании следующего кода, но я обнаружил, что иногда он просто не разбирается и возвращает nil .
// Take a date string in the format "Oct 23, 2013", and convert it into a NSDate value
// THIS DOESN'T WORK ! DON'T TRUST THIS CODE !!
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM dd, yyyy"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate* date = [formatter dateFromString:dateString];
Я помню, что он с треском провалился 12 октября 2012 года ... вот почему я отказался и использовал более сложную функцию parseDateString, показанную выше.
Я хочу сказать ... будьте осторожны.
Некоторые из самых простых функций NSDate просто не работают должным образом ...
setHour
,setMinute
,setSecond
и т.д. для более тонкой зернистости.