如何将特定 GMT 用于其他时区可识别的功能
Posted
技术标签:
【中文标题】如何将特定 GMT 用于其他时区可识别的功能【英文标题】:How to use a specific GMT for a function which will be recognised by other time zones 【发布时间】:2020-10-16 17:51:45 【问题描述】:我想有一个简单的方法可以做到这一点,但我还没有弄清楚。
我只想在 AEST (GMT+10) 上午 9 点到下午 12 点之间显示一个按钮。
因此,对于 AWST (GMT+8) 中的用户,他们将无法在上午 11 点看到按钮。
我有我想使用的具体时间
let date = Date()
let dateFormatterTime = DateFormatter()
dateFormatterTime.dateFormat = "HH:mm:ss"
dateFormatterTime.timeZone = TimeZone(secondsFromGMT: 36000)
let sydneyTime = dateFormatterTime.string(from: date)
print(sydneyTime)
我有一个适用于每个位置的时区的函数
func CheckTime()->Bool
var timeExist: Bool
let calendar = Calendar.current
let startTimeComponent = DateComponents(calendar: calendar, hour: 9)
let endTimeComponent = DateComponents(calendar: calendar, hour: 12, minute: 01)
let now = Date()
let startOfToday = calendar.startOfDay(for: now)
let startTime = calendar.date(byAdding: startTimeComponent, to: startOfToday)!
let endTime = calendar.date(byAdding: endTimeComponent, to: startOfToday)!
if startTime <= now && now <= endTime
button.isHidden = false
timeExist = true
print("9am-12pm")
print(sydneyTime)
else
button.isHidden = true
timeExist = false
print("After 12:01pm")
print(sydneyTime)
return timeExist
如何使用 AEST (sydneyTime) 而不是公历时间 (Calendar),以便该功能仅在 AEST (GMT+10) 期间有效?
【问题讨论】:
如果不是公历,他们在澳大利亚东部使用什么日历? 它是公历,但西澳大利亚的时间上午 9 点与东澳大利亚的时间上午 9 点不同。如果 (Calendar) 函数在上午 9 点在西澳大利亚使用,它会像上午 9 点一样工作,但在东部实际上是上午 11 点。 【参考方案1】:您可以使用日历方法func dateComponents(in timeZone: TimeZone, from date: Date) -> DateComponents
并获取所需时区的小时部分。然后您只需要检查它是否包含在所需的小时范围内:
let timeZone = TimeZone(secondsFromGMT: 36000)!
let hourInAEST = Calendar.current.dateComponents(in: timeZone, from: Date()).hour!
if 9..<12 ~= hourInAEST
print(true)
else
print(false)
【讨论】:
以上是关于如何将特定 GMT 用于其他时区可识别的功能的主要内容,如果未能解决你的问题,请参考以下文章
怎么把win7的UTC时区改为GMT时区 我需要改过来进行刷机