Неверная дата при установке Calendar timeZone на UTC - PullRequest
0 голосов
/ 28 мая 2020

По всему приложению я использую объекты Date, которые, когда я NSLog отображаю значение, которое мне показывает:

2020-05-24 22:00:00 + 0000

* 1004 25-е ​​(-1 для лета, -1 для часового пояса). Я хочу сделать несколько сравнений дат календаря:
var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = TimeZone(identifier: "UTC")!
// In order to have start on Monday
calendar.firstWeekday = 2

Используя этот календарь, скажем, я хочу получить дату начала текущей недели:

extension Date
{
    var startOfWeek: Date {
        return Calendar.gregorian.date(from: Calendar.gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self))!
    }
}

Если я NSLog:

Date().startOfWeek

Он покажет мне:

2020-05-25 00:00:00 + 0000

Если я отключу строку часового пояса в календаре, он покажет мне:

2020-05-24 22:00:00 + 0000

Я всегда думал, что вторая - правильная версия UT C. Я ошибся? Поскольку я думал, что все основные данные датируются, все даты указаны во второй версии. Вкратце: если я установил для календаря значение UT C, мои даты будут ошибочными. Если я этого не сделаю, они хороши. И все это время даты указаны в UT C.

1 Ответ

0 голосов
/ 28 мая 2020

Вы ошибаетесь, потому что даты CoreData не зависят от TimeZone. Даты есть даты. Думайте о них как о числовых c значениях. Когда вы переводите это значение в дату и час, тогда и только тогда применяется часовой пояс.

В вашем примере все правильно. Для календаря с часовым поясом UT C, 2020-05-25 00:00:00 +0000 является началом недели. Если вы используете другие значения часового пояса (например, значение по умолчанию из Locale), то ваша неделя начинается в 2020-05-24 22:00:00 +0000. Это означает, что в вашем часовом поясе час 2020-05-25 00: 00: 00.

...