iOS时区转换

发布时间 2023-07-10 21:10:59作者: 東玖零

背景:我们开发的应用有可能会在国外使用,有一些业务又和时间有关,如果我们从手机上获取的时间不做处理直接使用就会有问题。

现象:北京时间2023年7月10号20:00开启秒杀活动,用户在美国达拉斯打开活动页面显示活动还没开始。

排查:应用服务器在北京,从服务器的日志中看达拉斯的用户请求时间竟然是上午7:00,相差了13个小时,那我们如何处理呢?

方案:

  1、我们在请求时带上时区参数,在服务器校正时间。

  2、客户端将达拉斯时间转成北京时间。

这个转换过程虽然是将达拉斯的用户手机时间加13个小时,但iOS时区转换和时间格式化很类似,代码如下:

static func dateToDetailString() ->String {
        let date = Date()
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        //转成北京时区下的日期
        let beijingZone = NSTimeZone(abbreviation:"GMT+0800")
        formatter.timeZone = beijingZone as TimeZone?
        let dateString = formatter.string(from: date)
        return dateString
}