Почему NSCalendar dateFromComponents возвращает неправильную дату? - PullRequest
5 голосов
/ 01 декабря 2010

Я ожидаю 2010-10-11 00: 00: 00

Но вместо этого я получаю 2010-10-10 21:00:00 + 0000

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

Пожалуйста, помогите!

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:2010];
[comps setMonth:10];
[comps setDay:11];

[comps setHour:0];
[comps setMinute:0];
[comps setSecond:0];

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *retDate = [cal dateFromComponents:comps];

Ответы [ 2 ]

15 голосов
/ 01 декабря 2010

Я думаю, что ваша проблема может быть решена установкой NSTimeZone.

0 голосов
/ 28 июня 2016

Если вам нужен определенный формат времени, используйте этот форматер или напишите это, чтобы получить правильное время.первый вариант ...

let formatter = NSDateFormatter()
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    let localDate = formatter.dateFromString("1989-10-17T05:00:00.000-0000")

или если вам нужна дата из компонентов, используйте следующий код, например ...

let calendar = NSCalendar.currentCalendar()
    calendar.timeZone = NSTimeZone(name: "GMT")!
    let date = calendar.dateFromComponents(components)

или вам нужно

...