检查当地时间是否在另一个时区的午夜之后

时间:2017-07-28 00:02:50

标签: swift time

我想检查当地时间是否在另一个时区的午夜之后。

具体来说,如果我现在在星期六晚上11点或当地时间星期日凌晨1点,我想看看它是否是中部时间新一周的开始(星期日上午12点之后)。

1 个答案:

答案 0 :(得分:2)

您可以使用Calendar' dateComponents(in: TimeZone, from: Date)来检查其他时区的时间和日期。针对您的具体应用:

// create current date, central time zone, and get the current calendar
let now = Date()
let centralTimeZone = TimeZone(abbreviation: "CST")!
let calendar = Calendar.current

let components = calendar.dateComponents(in: centralTimeZone, from: now)

if components.weekday == 1 {
    print("It is Sunday in Central Standard Time.")
} else {
    print("It is not Sunday in Central Standard Time.")
}

您正在做的是要求当前日历在指定的时区内为您提供一整套DateComponents。然后components.weekday将星期几作为Int,从公历的星期日开始为1。

如果你想更全面地了解它是否明天"在某个地方,这是一个简单的方法:

func isItTomorrow(in zone: TimeZone) -> Bool {
    var calendarInZone = Calendar(identifier: Calendar.current.identifier)
    calendarInZone.timeZone = TimeZone(abbreviation: "CST")!
    return calendarInZone.isDateInTomorrow(Date())
}

if isItTomorrow(in: centralTimeZone) {
    print("It is tomorrow.")
} else {
    print("It is not tomorrow.")
}

isItTomorrow(in: TimeZone)创建与当前日历相同类型的新日历(可能是.gregorian,但您永远不知道)并将其时区设置为所需的日历。然后它使用整洁的内置Calendar方法.isDateInTomorrow()来检查当前时间是否为"明天"在目标时区。

还有很多其他方法可以做到这一点,根据您的具体需要,可能会有一个内置的方法可以为您节省大量的工作,因此值得一读的{%{ {3}}和Calendar了解可用的内容。