IPhone OS: Как мне создать NSDate для определенной даты?

Кажется, что это просто, но я не могу найти способ сделать это.

Было бы здорово увидеть пару разных методов.

Ответ 1

@Чайк ответ правильный, и привести меня к следующему коду. Думаю, я бы разделил:

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:10];
[comps setMonth:10];
[comps setYear:2010];
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:comps];

Ответ 2

Вы можете использовать этот

NSString *dateString = @"03-Sep-11";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd-MMM-yy";
NSDate *date = [dateFormatter dateFromString:dateString];

Надеюсь, это поможет вам.

Ответ 3

Если вы говорите о конкретной дате календаря, а не о дате UNIXy, вам, вероятно, нужен NSCalendar dateFromComponents:.

Ответ 4

Смотрите документацию для NSDate. Вы можете использовать dateFromString: метод NSDateFormatter или dateFromComponents: метода NSCalendar.

Ответ 5

Swift 3 Примеры

Примеры часто являются самым простым способом обучения. Вот несколько примеров.

Теперь

Этот самый простой.

let currentDateTime = Date()

20 февраля 2017 года

// 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)

1 апреля 1976 г.

// 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)

Нужна более подробная информация...?

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

Ответ 6

Я нашел эту нить, ища ответ на этот вопрос, но затем я нашел хороший пример в одном из моих книг по программированию 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];

Ответ 7

Это смешно, не так ли?

Середина 2013 года, и Apple по-прежнему не предоставила простой способ установить значение NSDate.

Во время моего текущего проекта iPad я не мог поверить, что мне пришлось некоторое время останавливать производительность, чтобы написать собственный класс помощников, чтобы получить значение Year из 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"];

Примечание. Эта функция была основана на коде, взятом здесь: fooobar.com/info/68789/...

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

//  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 просто не работают должным образом...