gpt4 book ai didi

ios - 如何将服务器响应日期转换为本地时区?

转载 作者:行者123 更新时间:2023-12-01 18:11:49 25 4
gpt4 key购买 nike

在api调用响应中,我得到不同时区的日期。我想将其转换为用户的本地时区,并且用户可以从ios时区列表中选择任何时区。这都是本地的。我们永远不会将选定的用户时区发送到服务器。

并且在进行任何api调用时,可以说我正在选择器中创建一个具有选定开始日期的事件。我应该将它发送给全球时区,而不是与用户选择的时区一起发送,因为它是应用程序本地的。

目前,我正在选择更改defaultTimeZone,以便获得正确的当前日期等。并使用NSDateFormatter和setTimeZone ... [NSTimeZone timeZoneWithName ...

这是一种更好的方法来更改在应用程序本地的defaultTimeZone吗?将NSdate发送到服务器时,应如何将其转换回全局日期?

最佳答案

NSDate是一个时间点,您可以将其称为绝对时间。这个时间对于地球上的每个地方都是一样的。 NSDate不代表格式化为特定位置人们喜欢的时间。这种差异非常重要。

一个NSDate()可以在多个时区中具有多个表示形式。

为了更直观,这5个时钟都代表一个时间点(NSDate实例):

它们只是显示同一时间点的不同表示。

可以说这些时钟就是NSDateFormatter.stringFromDate()。他们将绝对时间点转换为本地表示。

要在不同时区之间进行转换,您无需更改NSDate,您可以更改NSDateFormatter的时区。如果从服务器获取的日期字符串为UTC,则需要一个NSDateFormatter,它使用UTC作为timeZone:

let utcDateFormatter = NSDateFormatter()
utcDateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
utcDateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
utcDateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

let serverString = "2015-04-03 12:34:56" // date from server, as date representation in UTC
let date = utcDateFormatter.dateFromString(serverString) // date you got from server, as point in time

要向您的用户显示该服务器时间,请使用该NSDate并将其放入另一个dateFormatter中:
// display absolute time from server as timezone aware string
let localDateFormatter = NSDateFormatter()
localDateFormatter.dateStyle = NSDateFormatterStyle.LongStyle
localDateFormatter.timeStyle = NSDateFormatterStyle.LongStyle
let localDateString = localDateFormatter.stringFromDate(date)

如果要将日期字符串发送回服务器,请使用NSDate并将其放入UTC dateFormatter中。
// send back time to server
let dateString = utcDateFormatter.stringFromDate(NSDate())

关于ios - 如何将服务器响应日期转换为本地时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29406819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com