如何将特定 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) -&gt; 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时区 我需要改过来进行刷机

将时间更改为特定时区的最简单方法

无法连接到 mySQL,因为无法识别服务器时区值“GMT Summer Time”

如何在 Android 设备中使用 GMT 获取时区格式?

如何将 UTC 格式的字符串转换为特定时区的日历?

java.sql.SQLException:无法识别服务器时区值“Hora de verano GMT”[重复]