Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何获取用户';斯威夫特当地时间是什么时候?_Swift_Timezone - Fatal编程技术网

Swift 如何获取用户';斯威夫特当地时间是什么时候?

Swift 如何获取用户';斯威夫特当地时间是什么时候?,swift,timezone,Swift,Timezone,我正在制作一个应用程序,它可以决定日落和日出。尽管如此,我还是发现使用用户的本地时间获取它们有些困难。因此,我想知道:如何在Swift中获取用户的时区 我在iPhone模拟器中加载的测试位置(Puerto Vallarta,Mex)的坐标如下: 纬度:20.61 经度:-106.23 下一步是我的代码的一部分,用于确定世界上任何位置的日出和日落: //First we get the sunrise time. let sunriseDate = Date(timeIntervalSince19

我正在制作一个应用程序,它可以决定日落和日出。尽管如此,我还是发现使用用户的本地时间获取它们有些困难。因此,我想知道:如何在Swift中获取用户的时区

我在iPhone模拟器中加载的测试位置(Puerto Vallarta,Mex)的坐标如下:

纬度: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时间的值(我用这个转换为日期和时间)。现在我看到我有效地得到了正确的日落和日出,但是在UTC格式中,现在我缺少了从UTC到本地时间的一步

总之,我得到:

从unix时间中的API:time(例如sunrise=1541855294;sunset=1541895681;)中,使用DateFormatter()从中提取时间(请参见上面的代码),我得到了UTC时间(formatter.dateFormat=“HH:mm:ss”)

我希望通过这次修改,问题现在更加清楚了

这就是为什么我想问你是否可以帮我一把,请:)


提前谢谢,我为任何误解道歉

您是否尝试使用日期方法描述(使用locale: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表示时区偏移量,以小时和分钟表示(例如,“2001-03-24 10:45:32+0600”)


之后,您可以给它任何您想要的格式…

您是否尝试过不设置formatter.timeZone?然后,应使用用户设置中的时区。顺便说一句-如果确实使用时区,请使用
时区
,而不是
时区
。是否要以用户的本地时间或坐标的本地时间显示时间?对于后者,您需要知道坐标的时区。我想保持简单,所以我只想显示用户的时间(仅显示时间HH:mm:ss)@M@JorgeAlbertoFuentesCasillas然后,只需删除设置格式化程序时区属性的行,然后就可以完成设置,就像Martin在第一条评论中所说的那样。这应该只用于调试,而不是显示给用户。OP只需要时间,而不是日期。正如我在评论末尾所写的那样…“你可以给出你想要的格式…”(HH:MM:SS)并使用该值与日出或日落值进行比较。你不能使用
说明(with:)
方法设置格式,
日期
字符串,不是日期
。请澄清如何使用
日期
方法的
说明(带:)
给出OP所需的结果。