2015-05-07 5 views
0

Я хочу дату как 07:05 или 16:25Xcode Swift NSDate Пользовательские

Я пытался, но он не работает точно

var array1 = ["05:30","05:50","06:10","06:30","06:50","07:05","07:13","07:19","07:25","07:30","07:35","07:40","07:46","07:53","07:59","08:06","08:12","08:20","08:28","08:37","08:46","08:55","09:05","09:15","09:25","09:35","09:45","09:55","10:05","10:15","10:25","10:35","10:45","10:55","11:05","11:15","11:25","11:35","11:45","11:55","12:05"] 

var arrr = [String()] 
     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = "HH:mm" 
     let calendar = NSCalendar.currentCalendar() 


     for ora in array1 { 



      var date = dateFormatter.dateFromString(ora) 
      var comp = calendar.components((.CalendarUnitHour | .CalendarUnitMinute), fromDate: date!) 
      var hour = comp.hour 
      var minute = comp.minute 

      minute = minute + 10 

      if minute >= 60 { 

       minute = minute - 60 
       hour = hour + 1 

      } 
      var nuovoOrario = "\(hour):\(minute)" 
      arrr.append(nuovoOrario) 

     } 


     println(arrr) 

результат:

[, 5:40, 6:0, 6:20, 6:40, 7:0, 7:15, 7:23, 7:29, 7:35, 7:40, 7:45, 7:50, 7:56, 8:3, 8:9, 8:16, 8:22, 8:30, 8:38, 8:47, 8:56, 9:5, 9:15, 9:25, 9:35, 9:45, 9:55, 10:5, 10:15, 10:25, 10:35, 10:45, 10:55, 1K1:5, 11:15, 11:25, 11:35, 11:45, 11:55, 12:5, 12:15, 5:40, 6:0, 6:20, 6:40, 7:0, 7:15, 7:23, 7:29, 7:35, 7:40, 7:45, 5:40, 6:0, 6:20, 6:40, 7:0, 7:15, 7:23, 7:29, 7:35, 7:40, 7:45, 5:40, 6:0, 6:20, 6:40, 7:0, 7:15, 7:23, 7:29, 7:35, 7:40, 7:45, 5:40, 6:0, 6:20, 6:40, 7:0, 7:15, 7:23, 7:29, 7:35, 7:40, 7:45, 5:40, 6:0, 6:20, 6:40, 7:0, 7:15, 7:23, 7:29, 7:35, 7:40, 7:45, 5:40, 6:0, 6:20, 6:40, 7:0, 7:15, 7:23, 7:29, 7:35, 7:40, 7:45] 

Даты, не имеют 0 перед этим

пример

8:3 -> I want 08:03 
7:0 -> I want 07:00 
10:5-> I want 10:05 
+0

Рассмотрим NSDateFormatter как способ превращения даты в строку ... – matt

+0

Решенный с варом date2 = dateFormatter.dateFromString (nuovoOrario) вар DateString = dateFormatter.stringFromDate (date2!) arrr.append (dateString) –

ответ

0

просто необходимо comp.minute += 10.

деталь:

var array1 = ["05:30","05:50","06:10","06:30","06:50","07:05","07:13","07:19","07:25","07:30","07:35","07:40","07:46","07:53","07:59","08:06","08:12","08:20","08:28","08:37","08:46","08:55","09:05","09:15","09:25","09:35","09:45","09:55","10:05","10:15","10:25","10:35","10:45","10:55","11:05","11:15","11:25","11:35","11:45","11:55","12:05"] 

     var arrr = [String()] 
     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = "HH:mm" 
     let calendar = NSCalendar.currentCalendar() 


     for ora in array1 { 

      var date = dateFormatter.dateFromString(ora) 
      var comp = calendar.components((.CalendarUnitHour | .CalendarUnitMinute), fromDate: date!) 

      comp.minute = comp.minute + 10 

      var newDate = calendar.dateFromComponents(comp) 

      var dateString = dateFormatter.stringFromDate(newDate!) 

      arrr.append(dateString) 

     } 
     println(arrr) 
0

Как сказал другой плакат, почему бы не использовать уже созданный формат даты для создания строк вывода?

var array1 = 
    ["05:30","05:50","06:10","06:30","06:50","07:05","07:13","07:19", 

    "07:25","07:30","07:35","07:40","07:46","07:53","07:59","08:06", 
    "08:12","08:20","08:28","08:37","08:46","08:55","09:05","09:15", 
    "09:25","09:35","09:45","09:55","10:05","10:15","10:25","10:35", 
    "10:45","10:55","11:05","11:15","11:25","11:35","11:45","11:55", 
    "12:05"] 
let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "HH:mm" 
for aString in array1 
{ 
    if let aDate = dateFormatter.dateFromString(aString) 
    { 
    println("date = \(dateFormatter.stringFromDate(aDate))") 
    } 
} 

Если вы хотите сделать математику на ваши даты, вы лучше преобразования в NSDate, а затем с помощью методов NSCalendar как dateByAddingComponents:toDate:options:

Этот метод позволит вам добавить часы, минуты, или что-то к вашим датам и обрабатывать все переполнения правильно. Затем просто введите итоговую дату, используя метод dateFromString dateformatter date, как указано выше.

+0

Почему вы создали другой ответ? – Christian

+0

Это совершенно другой ответ на вопрос. Я думал, что буду легче читать читателям, если я сохраню их отдельно. –

0

Если вы решили создать свой выводить строки самостоятельно, вы можете использовать stringWithFormat intializer для строки:

let timeString = String(format: "%02d:%02d", hour, minute) 

Но это действительно гораздо лучше использовать NSCalendar для добавления значения компонентов к вашим датам, а затем использовать ваш формат даты, чтобы вывести их.

Расчет даты, использующий NSCalendar, будет обрабатывать десятки краевых дел правильно (перевертывание часа, переключение на следующий день, переключение на следующий год, високосные годы, различные календари и т. Д.)

Форматирование даты будет обрабатывать локализацию вашего выходного формата гораздо более изящно, чем вы, особенно если вы используете стили, а не явные форматы дат.

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