获取 NSDate 以根据它的 secondsFromGMT 显示来自另一个时区的日期

Get NSDate to display a date from another timezone based on it's secondsFromGMT

我正在存储一条记录,这条记录附有日期 pumpTimeNSDate

如果创建此记录的设备与加载记录的设备位于不同的时区,则加载记录的设备显示的日期与创建设备显示的日期不同记录。我希望他们都显示相同的日期。

我知道发生这种情况是因为 NSDateFormatter() 将 NSDate(这只是时间参考)调整为用户当前时区,同时考虑到它与 GMT 的距离。

如何让在不同时区加载记录的设备显示创建记录的设备上正在显示的相同内容?

注意:originTimeOffsetObject 存储创建记录的设备与 GMT 的距离。

    if let pumpTimeNSDate = objects[indexPath.row].objectForKey("pumpTimeNSDate") as? NSDate {

                let formatter = NSDateFormatter()
                formatter.dateFormat = "E dd, H:mm"

                if let originTimeOffsetObject = objects[indexPath.row].objectForKey("originTimeOffset") as? NSTimeInterval 
                {

                // not sure how to use originTimeOffsetObject

                }
                else
                {
                   // if timeoffset do not exist on DB
                   createdAt = formatter.stringFromDate(pumpTimeNSDate)
                }
    }

您创建一个 NSTimeZone 并将其设置到 NSDateFormatter 上。由于您知道偏移量,因此您可以:

let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .MediumStyle   
dateFormatter.timeStyle = .MediumStyle
dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) // Update to your value
dateFormatter.stringFromDate(NSDate()) // Display your date

在不同的时区中,您的日期值仍然相同,但它是在当前时区中格式化的。

因此,如果您想显示每个地方的时间都相同,您可以使用 NSDateFormatter 将时间转换为 NSString,而时区是您的默认固定时区。或者您可以将时间存储在 NSString 中,在每个地方它都将相同 :)