我正在开发一款可确定日落和日出的应用程序。但是,我发现使用用户的本地时间来获取它们有些困难。因此,我想知道:如何在Swift中获取用户的时区?
我在iPhone模拟器中加载的我的测试位置(墨西哥普埃托·瓦拉塔)的坐标是:
纬度:20.61 经度:-106.23
接下来是我的代码的一部分,用于确定世界上任何位置的日出和日落:
//First we get the sunrise time.
let sunriseDate = Date(timeIntervalSince1970: sunriseValue.doubleValue)
let formatter = DateFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .medium
formatter.timeZone = NSTimeZone(name: "UTC")! as TimeZone
formatter.dateFormat = "HH:mm:ss"
let sunrise = formatter.string(from: sunriseDate)
print(sunrise)
//Second, we get the sunset time
let sunsetDate = Date(timeIntervalSince1970: sunsetValue.doubleValue)
let sunset = formatter.string(from: sunsetDate)
print(sunset)
这是我从控制台获得的信息:
日出:13:08:12 日落:00:21:22
这足以证明印制的日出和日落与UTC相对应,尽管如此,我仍然没有找到任何直接信息可以帮助我获取用户的本地时间(无论该人身在何处)。
基本上,您在上面的代码中看到的日出和日落是从一个API(openweather)获得的,我从中获得了它们在unix时间中的值(我使用link将其转换为日期和时间)。我看到我实际上得到了正确的日落和日出,但是采用UTC格式,现在我缺少从UTC到当地时间的一步。
因此,总而言之,我得到了:
从API:Unix时间(例如,日出时间= 1541855294;日落= 1541895681;),使用DateFormatter()(请参见上面的代码)从中提取时间,然后得到UTC时间(formatter.dateFormat =“ HH: mm:ss“)。
我希望现在进行修改后,问题会变得更加清楚。
这就是为什么我想问你是否可以请我帮忙:)
在此先感谢您的误会!
答案 0 :(得分:-1)
您是否尝试使用Date方法描述(语言环境:Locale?)来获取用户的本地化时间?这将为您提供设备时间
let date = Date().description(with: .current)
print(date) //Saturday, November 10, 2018 at 11:30:58 AM Central Standard Time
日期的字符串表示形式,使用给定的语言环境,或者如果语言环境参数为nil,则采用国际格式YYYY-MM-DD HH:MM:SS±HHMM,其中±HHMM表示时区偏移量(小时)和距UTC的分钟(例如,“ 2001-03-24 10:45:32 +0600”)。
之后,您可以根据需要给它任何格式...