Подтвердить что ты не робот

NSDate Min и Max Возможные значения

Кто-нибудь знает, какие минимальные и максимально возможные значения для NSDate?

4b9b3361

Ответ 2

EDITED Ответ:

Я думал, что я обнаружил, что минимальное значение даты было 0001-01-01 00:00:00 + 0000 (учитывая мой код ниже) ОДНАКО, как было указано в комментариях ниже, это только для текущей эры ( т.е. AD). Значение NSDate может пойти ниже этого, но то, что вы видите в результате NSLog, возможно, не так, как вы ожидаете, поэтому я бы рекомендовал посмотреть другие ответы здесь и игнорировать мое незнание.

ОРИГИНАЛЬНЫЙ Ответ:

Я считаю, что я обнаружил минимальное значение даты 0001-01-01 00:00:00 + 0000

Вы должны быть очень осторожны, когда NSLog'ing и parsing значения, чтобы ваш часовой пояс не искажал значение даты немного.

Я попробую и продемонстрирую ниже:

NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
[dateFormatter1 setDateFormat:@"yyyy-MM-dd hh:mm:ss z"];

NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];
[dateFormatter2 setDateFormat:@"yyyy-MM-dd HH:mm:ss z"];

NSDateFormatter *dateFormatter3 = [[NSDateFormatter alloc] init];
[dateFormatter3 setDateFormat:@"yyyy-MM-dd HH:mm:ss z"];
[dateFormatter3 setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

NSDate *date1 = [NSDate dateWithTimeIntervalSince1970:-62135596800];
NSLog(@"date1 = %@", date1);
NSLog(@"date1 via dateFormatter1 = %@", [dateFormatter1 stringFromDate:date1]);
NSLog(@"date1 via dateFormatter2 = %@", [dateFormatter2 stringFromDate:date1]);
NSLog(@"date1 via dateFormatter3 = %@", [dateFormatter3 stringFromDate:date1]);

NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:-62135596800 - 100]; // The - 100 makes no difference
NSLog(@"date2 = %@", date2);
NSLog(@"date2 via dateFormatter1 = %@", [dateFormatter1 stringFromDate:date2]);
NSLog(@"date2 via dateFormatter2 = %@", [dateFormatter2 stringFromDate:date2]);
NSLog(@"date2 via dateFormatter3 = %@", [dateFormatter3 stringFromDate:date2]);

Это приводит к следующему результату (на моем iPad с учетом его часового пояса):

date1 = 0001-01-01 00:00:00 +0000
date1 via dateFormatter1 = 0001-12-31 11:58:45 GMT-00:01:15
date1 via dateFormatter2 = 0001-12-31 23:58:45 GMT-00:01:15
date1 via dateFormatter3 = 0001-01-01 00:00:00 GMT
date2 = 0001-12-31 23:58:20 +0000
date2 via dateFormatter1 = 0001-12-31 11:57:05 GMT-00:01:15
date2 via dateFormatter2 = 0001-12-31 23:57:05 GMT-00:01:15
date2 via dateFormatter3 = 0001-12-31 23:58:20 GMT

Примечание date2 и то, что вычитание дополнительных 100 секунд не уменьшало значение даты, но фактически, казалось, увеличивало его. Очевидно, что-то необычное в том, как работают внутренние работы NSDate, время настраивается на 100 секунд, но это, возможно, сокращает день и месяц, потому что это не может быть ниже?

Ответ 3

максимум должен быть: 5828963-12-20 00:00:00 +0000, потому что

NSDate *dateSinceNow = [NSDate dateWithTimeIntervalSinceNow:DBL_MAX];
NSDate *dateSindeReferenceDate = [NSDate dateWithTimeIntervalSinceReferenceDate:DBL_MAX];
NSLog(@"min: %@, max: %@", dateSinceNow, dateSindeReferenceDate);

то же самое.

минимум я получаю это: 0001-01-01 00:00:00 +0000

Потому что это то, что я получаю, когда пытаюсь:

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
[df setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate *myDate = [df dateFromString: @"0001-01-01 00:00:00"];
NSLog(@"%@", myDate);

но это текущая эра, как указано davedelong

поэтому, если вы попробуете первый пример с - DBL_MAX, вы получите: 41221-07--2147483641 00:00:00 +0000. не знаю, что такое эра...