Почему даты NSCalendar насчет возвращает неправильную дату?

StackOverflow https://stackoverflow.com/questions/4322687

Вопрос

Я ожидаю 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];
Это было полезно?

Решение

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

Другие советы

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

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)

или вам нужно

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top