在 Swift 中获得时间 4

Getting time in Swift 4

我是编程新手,正在尝试通过学习 Swift 开始我的旅程。 目前我正在开发一个天气应用程序,我正在开发该应用程序是为了学习目的。

我正在使用 openweathermap.org API 获取天气和太阳能数据。

现在我完全能够解析 JSON 并使用这些信息。我面临的唯一问题是 Swift 根据我当地的时区计算日落和日出时间,这是我不想要的。

我住在阿姆斯特丹。如果我想查看纽约的日落和日出,我应该根据纽约当地时间而不是我的当地时间获取日落和日出信息。

func sunTimeConverter(unixTimeValue: Double) -> String {
    let dateAndTime = NSDate(timeIntervalSince1970: unixTimeValue)
    let dateFormater = DateFormatter()
    dateFormater.dateStyle = .none
    dateFormater.timeStyle = .short
    dateFormater.timeZone = TimeZone(abbreviation: "GMT")
    dateFormater.locale = Locale.autoupdatingCurrent
    let currentdateAndTime = dateFormater.string(from: dateAndTime as Date)
    return currentdateAndTime
}  

 let sunSetFromJSON = jsonObject["sys"]["sunset"].doubleValue
 weatherDataModel.citySunSet = sunTimeCoverter(unixTimeValue: sunSetFromJSON)

这是 JSON 对象 :

{
  "main" : {
    "humidity" : 93,
    "temp_max" : 285.14999999999998,
    "temp_min" : 284.14999999999998,
    "temp" : 284.39999999999998,
    "pressure" : 1020
  },
  "name" : "Beverwijk",
  "id" : 2758998,
  "coord" : {
    "lon" : 4.6600000000000001,
    "lat" : 52.479999999999997
  },
  "weather" : [
    {
      "id" : 701,
      "main" : "Mist",
      "icon" : "50n",
      "description" : "mist"
    }
  ],
  "clouds" : {
    "all" : 75
  },
  "dt" : 1510260900,
  "base" : "stations",
  "sys" : {
    "id" : 5204,
    "message" : 0.0201,
    "country" : "NL",
    "type" : 1,
    "sunset" : 1510242952,
    "sunrise" : 1510210438
  },
  "cod" : 200,
  "visibility" : 4500,
  "wind" : {
    "speed" : 3.6000000000000001,
    "deg" : 220
  }
}

您需要稍微改变一下您的方法并添加您要显示的时区:

func sunTimeCoverter(unixTimeValue: Double, timezone: String) -> String {
  let dateAndTime = NSDate(timeIntervalSince1970: unixTimeValue)
  let dateFormater = DateFormatter()
  dateFormater.dateStyle = .none
  dateFormater.timeStyle = .short
  dateFormater.timeZone = TimeZone(abbreviation: timezone)
  dateFormater.locale = Locale.autoupdatingCurrent
  let currentdateAndTime = dateFormater.string(from: dateAndTime as Date)
  return currentdateAndTime
}

所以对于纽约,你可以这样称呼它:(你需要知道 openweathermap.org 的时区)

let sunSetFromJSON = jsonObject["sys"]["sunset"].doubleValue
weatherDataModel.citySunSet = sunTimeCoverter(unixTimeValue: sunSetFromJSON, timezone: "UTC-05:00")

您可以根据this answer获取该地点的时区。 并且根据时区,您可以计算出该地点的日落和日出时间。