应用 OpenWeatherMap 提供的时区偏移数据 (Swift)
Applying timezone offset data provided by OpenWeatherMap (Swift)
只要您有 UTC 数据,使用这样的函数就可以非常简单地获取用户当前位置的当前日期、小时、分钟等:
func getHourForDate(_ date: Date?)-> String{
guard let date = date else {return "error"}
//initialize formatter
let formatter = DateFormatter()
//set format to 12 hour clock with am/pm
formatter.dateFormat = "h a"
//return formatting string
return formatter.string(from: date)
}
我 运行 遇到的问题是,当我尝试解析来自世界各地的数据时,该函数只根据我自己的位置给我时间。 OpenWeather 似乎提供了一些数据来解决这个问题。查看我创建的天气响应中的几个参数:
struct WeatherResponse: Codable {
let timezone: String
let timezone_offset: Int
}
所以我有一个字符串,它为我提供了诸如“Atlantic”之类的数据和诸如“-14400”之类的偏移量。问题是我不知道如何应用这些数据。简单地从 API 提供的 UTC 时间中减去 timezone_offset 似乎是不正确的。我尝试了类似下面提供的代码,但它似乎只在我 运行 我的 phone 上的应用程序时有效,使用我的当前实际位置,而不是当我尝试模拟世界各地的其他位置时我当前位置:
//get the difference of my current location timezone offset and the offset of each json response
//(this should cancel out any offset for my current location)
let timezoneDifference = currentLocationTimezoneOffset - timezone_offset
//subtract the offset from the hour date provided by the json
let offset = utcFromJson - timezoneDifference
//pass the offset into the function to return a formatted date string
let hourLabel.text = getHourForDate(Date(timeIntervalSince1970: TimeInterval(offset)
我希望这个问题是直截了当的,或者我没有遗漏任何有用的信息。感谢任何帮助,谢谢!
您可以尝试一些简单的操作,例如此示例代码,以获取“其他”位置的时间:
let timeHere = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "LLLL dd, hh:mm:ss a"
dateFormatter.timeZone = TimeZone(secondsFromGMT: response.timezone_offset) // <-- here
let timeThere = dateFormatter.string(from: timeHere)
print("timeHere: \(timeHere) timeThere: \(timeThere) \n")
只要您有 UTC 数据,使用这样的函数就可以非常简单地获取用户当前位置的当前日期、小时、分钟等:
func getHourForDate(_ date: Date?)-> String{
guard let date = date else {return "error"}
//initialize formatter
let formatter = DateFormatter()
//set format to 12 hour clock with am/pm
formatter.dateFormat = "h a"
//return formatting string
return formatter.string(from: date)
}
我 运行 遇到的问题是,当我尝试解析来自世界各地的数据时,该函数只根据我自己的位置给我时间。 OpenWeather 似乎提供了一些数据来解决这个问题。查看我创建的天气响应中的几个参数:
struct WeatherResponse: Codable {
let timezone: String
let timezone_offset: Int
}
所以我有一个字符串,它为我提供了诸如“Atlantic”之类的数据和诸如“-14400”之类的偏移量。问题是我不知道如何应用这些数据。简单地从 API 提供的 UTC 时间中减去 timezone_offset 似乎是不正确的。我尝试了类似下面提供的代码,但它似乎只在我 运行 我的 phone 上的应用程序时有效,使用我的当前实际位置,而不是当我尝试模拟世界各地的其他位置时我当前位置:
//get the difference of my current location timezone offset and the offset of each json response
//(this should cancel out any offset for my current location)
let timezoneDifference = currentLocationTimezoneOffset - timezone_offset
//subtract the offset from the hour date provided by the json
let offset = utcFromJson - timezoneDifference
//pass the offset into the function to return a formatted date string
let hourLabel.text = getHourForDate(Date(timeIntervalSince1970: TimeInterval(offset)
我希望这个问题是直截了当的,或者我没有遗漏任何有用的信息。感谢任何帮助,谢谢!
您可以尝试一些简单的操作,例如此示例代码,以获取“其他”位置的时间:
let timeHere = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "LLLL dd, hh:mm:ss a"
dateFormatter.timeZone = TimeZone(secondsFromGMT: response.timezone_offset) // <-- here
let timeThere = dateFormatter.string(from: timeHere)
print("timeHere: \(timeHere) timeThere: \(timeThere) \n")