2016-08-17 4 views

ответ

4

Использование NSCalendar:

let date = NSDate() 

let calendar = NSCalendar.currentCalendar() 
calendar.timeZone = NSTimeZone(name: "MST")! 

let hour = calendar.component(.Hour, fromDate: date) 
let between6And11PM = 18 <= hour && hour < 23 

(отредактирован с ОП говорится 11 вечера не должны быть включены)

+0

Какова стоимость вашей «даты»? Это даёт true: 'let date = calendar.dateWithEra (1, год: 2016, месяц: 8, день: 16, час: 23, минута: 30, секунда: 0, наносекунда: 0)!' –

+0

@CodeBender ** Shouldn 't ** это терпит неудачу, если оно падает между 11:00 и 11:59? ОП попросил «между 6 вечера и 11 вечера»; т.е. 18:00 <= t <= 23: 00'. «Между 11:00 и 11:59» - это одночасовой интервал _just after_, что спросил OP ...? –

0

Использование NSCalendar и NSDateComponents. Сделайте поиск в Xcode в строке «Календарные вычисления».

Вы могли извлечь часы, минуты и секунды с даты и записи соединения, если заявление, чтобы проверить, если время находится в диапазоне:

if components.hour >= 18 && components.hour < 23 { 
    print("The time is between 6PM and 11PM") 
} 
1
let date = NSDate() 
let calendar = NSCalendar.currentCalendar() 
let components = calendar.components([.Hour, .Minute], fromDate: date) 
let hour = components.hour 

switch hour { 
case 18...23: 
    print("True") 
default: 
    print("False") 
} 

Это решение работает для пользователя Текущее время. Будут ли люди вне MST использовать приложение?

-1

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

[Swift 3] 

// example of a date-time string 
let timeSubstring = "2016-08-06T18:16:11" 
// initialize 
let datetimeTime = DateFormatter() 
// provide format 
datetimeTime.dateFormat = "yyyy-MM-ddEEEEEHH:mm:ss" 

// converting from time zone 
datetimeTime.timeZone = TimeZone(identifier: "MST") 

// DateFormatter has been set up, now we can form the date properly 
let formDate = datetimeTime.date(from: timeSubstring) 

// create your upper and lower bounds (fill in) 
let topDate = datetimeTime.date(from: "XXXX-XX-XXXXX:XX:XX") 
let bottomDate = datetimeTime.date(from: "XXXX-XX-XXXXX:XX:XX") 

// make comparisons 
// checks condition left operand is smaller than right operand 
if formDate?.compare(other: topDate) == .orderedAscending { 
    // some code 
} 
// condition right smaller than left 
if formDate?.compare(other: bottomDate) == .orderedDescending { 
    // some code 
} 

Или сделать его & & если вы проверяете оба одновременно.

+0

У вас случайно есть 2 'bottomDate' объявления;) – Kametrixom

+0

@Kametrixom О, боже мой, хороший глаз - спасибо –

Смежные вопросы