Как Проверить, происходит ли NSDate между двумя другими NSDates

Проблема в том, что в вашей системе не установлен ни один из сертификатов удостоверяющего центра. И эти сертификаты не могут быть установлены с помощью cygwin setup.exe.

Обновление: Установите пакет Net / ca-Certificates в cygwin (спасибо dirkjot)

Существует два решения:

  1. Фактически установите root сертификаты. Ребята из Curl извлекли для вас сертификаты из Mozilla .

    cacert.pem файл - это то, что вы ищете. Этот файл содержит> 250 сертификатов CA (не знаю, как доверять этому количеству госзакупок). Вам необходимо скачать этот файл, разделить его на отдельные сертификаты, поместить их в / usr / ssl / certs (ваш CApath) и проиндексировать их.

    Вот как это сделать. С помощью cygwin setup.exe установите пакеты curl и openssl и выполните:

    $ cd /usr/ssl/certs
    $ curl http://curl.haxx.se/ca/cacert.pem |
      awk '{print > "cert" (1+n) ".pem"} /-----END CERTIFICATE-----/ {n++}'
    $ c_rehash
    

    Важно : Для использования c_rehash необходимо установить также openssl-perl.

  2. Игнорировать проверку сертификата SSL.

    ВНИМАНИЕ: Отключение проверки сертификата SSL имеет последствия для безопасности. Без проверки подлинности соединений SSL / HTTPS злоумышленник может выдать себя за доверенную конечную точку (такую ​​как GitHub или какой-либо другой удаленный хост Git), и вы будете уязвимы для атаки Man-in-the-Middle . Убедитесь, что вы полностью понимаете проблемы безопасности и своей модели угроз, прежде чем использовать это в качестве решения.

    $ env GIT_SSL_NO_VERIFY=true git clone https://github...
    

90
задан Brock Woolf 2 July 2009 в 08:29
поделиться

3 ответа

Я нашел решение. Если у вас есть лучшее решение, не стесняйтесь оставлять его, и я отмечу его как правильное.

+ (BOOL)date:(NSDate*)date isBetweenDate:(NSDate*)beginDate andDate:(NSDate*)endDate
{
    if ([date compare:beginDate] == NSOrderedAscending)
        return NO;

    if ([date compare:endDate] == NSOrderedDescending) 
        return NO;

    return YES;
}
164
ответ дан 24 November 2019 в 07:00
поделиться

Если вы хотите знать, попадает ли текущая дата между двумя заданными точками времени (с 9 утра до 5 вечера 1 июля 2009 г.), используйте NSCalendar и NSDateComponents для создания экземпляров NSDate в нужное время. и сравните их с текущей датой.

Если вы хотите знать, попадает ли текущая дата между этими двумя часами каждые день, то вы, вероятно, могли бы пойти другим путем. Создайте объект NSDateComponents с NSCalendar и вашим NSDate и сравните компоненты часа.

4
ответ дан 24 November 2019 в 07:00
поделиться

Для первой части используйте ответ от @kperryua , чтобы создать объекты NSDate, с которыми вы хотите сравнить. Судя по вашему ответу на ваш собственный вопрос, похоже, вы это поняли.

Что касается фактического сравнения дат, я полностью согласен с комментарием @Tim к вашему ответу. Он более краток, но на самом деле точно эквивалентен вашему коду, и я объясню почему.

+ (BOOL) date:(NSDate*)date isBetweenDate:(NSDate*)beginDate andDate:(NSDate*)endDate {
    return (([date compare:beginDate] != NSOrderedAscending) && ([date compare:endDate] != NSOrderedDescending));
}

Хотя может показаться, что оператор return должен оценивать оба операнда оператора &&, на самом деле это не так. Ключевым моментом является «оценка короткого замыкания », которая реализована в большом количестве языков программирования и, конечно, в C. В основном, операторы & и && ] "короткое замыкание", если первый аргумент равен 0 (или НЕТ, nil и т. д.), тогда как | и || делают то же самое, если первым аргументом является , а не 0. Если date предшествует beginDate , тест возвращает NO без необходимости даже сравнивать с endDate . По сути, он делает то же самое, что и ваш код, но в одном операторе в одной строке, а не в 5 (или 7, с пробелами).

Это предназначено как конструктивный ввод, поскольку, когда программисты понимают способ их конкретного языка программирования оценивает логические выражения, они могут строить их более эффективно, не особо заботясь об эффективности. Однако есть аналогичные тесты, которые будут менее эффективными, поскольку не все операторы замыкают цепи. (В самом деле, большинство не может короткозамкнуть, например, числовые операторы сравнения.) Если есть сомнения,

13
ответ дан 24 November 2019 в 07:00
поделиться