iPhone OS: Как мне создать NSDate для определенной даты? - PullRequest
92 голосов
/ 05 апреля 2010

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

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

Ответы [ 7 ]

203 голосов
/ 23 февраля 2011

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

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:10];
[comps setMonth:10];
[comps setYear:2010];
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:comps];
18 голосов
/ 29 октября 2012

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

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

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

16 голосов
/ 05 апреля 2010

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

9 голосов
/ 08 июня 2016

Swift Примеры

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

Теперь

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

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)

Нужно больше подробностей ...?

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

8 голосов
/ 05 апреля 2010

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

3 голосов
/ 30 июля 2015

Я нашел эту ветку, когда искал ответ на этот вопрос, но затем я нашел хороший пример в одной из моих книг по программированию Objective-C Big Nerd Ranch. Кредит им, а не мне.

  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];
2 голосов
/ 18 июля 2013

Это смешно, не правда ли?

Середина 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"];

Примечание: эта функция основана на коде, взятом отсюда: 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 просто не работают должным образом ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...