我是编程新手,并试图通过学习 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")
您可以根据此答案获取该地点的时区。根据时区,您可以计算该地点的日落和日出时间。