2016-09-09 3 views
0

Я пытаюсь понять, как NSCalendar и его компоненты работают в Swift. Я извлек компоненты с даты, изменил свойства компонентов и восстановил дату. Я ожидал получить Sept 9, 2015, 12:00 AM, но вместо этого получил Sept 9, 2015, 8:00 AM.dateFromComponents по умолчанию 8:00 AM

Почему часовой компонент в 8:00?

let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian) 
calendar?.timeZone = NSTimeZone(abbreviation: "GMT")! 

let components = calendar?.components([.Year, .Month, .Day, .Hour, .Minute, .Second], fromDate: NSDate()) 

components?.year   // 2016 
components?.month  // 9 
components?.day   // 9 
components?.hour   // 4 
components?.minute  // 31 
components?.second  // 54 

components?.year = 2015 
components?.month = 9 
components?.day = 9 
components?.hour = 0 
components?.minute = 0 
components?.second = 0 

calendar?.dateFromComponents(components!) // Sept 9, 2015, 8:00 AM 

приведенный выше код не предназначен для использования. это просто я пытаюсь понять, как NSCalendar, NSDateComponents и NSDate связаны друг с другом.

+1

Как вы смотрите на дату? Какой часовой пояс отображается для вывода даты? Это, вероятно, не проблема. – rmaddy

ответ

1

При печати это вы получите правильную дату, то NSDate является Sept 9, 2015, 8:00 AM потому, что вы установите часовой пояс по Гринвичу, он возвращает дату как "Sep 9, 2015, 12:00 AM" если изменить часовой пояс на NSTimeZone.defaultTimeZone()

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