将日历时区设置为UTC时,日期错误。

问题描述 投票:0回答:1

在整个应用程序中,我使用Date对象,当我NSLog的值时,它显示给我。

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

我认为当地的意思是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

如果我在日历上禁用timeZone行,它就会显示我。

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

我一直以为第二个才是正确的UTC版本。难道我说错了吗?因为我以为所有的核心数据日期,所有的日期都在第2个版本。简而言之:如果我把日历设置为UTC,我的日期比较就会出错。如果我不这样做,他们是好的。而且所有的时间日期都是UTC的。

ios swift nsdate nscalendar
1个回答
0
投票

你错了,因为CoreData的日期不受时区的影响。日期就是日期。把它们看作是数值。当你把这个值翻译成日期和时间时,只有在这个时候,才会应用TimeZone。

在你的例子中,一切都很正确。对于时区为UTC的日历,2020-05-25 00:00:00 +0000是一周的开始。如果您使用其他时区值(例如来自Locale的默认值),那么您的一周开始于2020-05-24 22:00:00 +0000。这意味着在你的时区,时间是2020-05-25 00:00:00。

© www.soinside.com 2019 - 2024. All rights reserved.