ios - 从字符串中获取 NSDate 对象

标签 ios swift nsdate nsdateformatter gmt

在将此问题标记为重复之前,请继续阅读。

我需要比较两个 NSDate。我从具有当前日期的服务器获取的日期。

NSDate.date() 我得到这个日期 2014-09-25 12:48:23 +0000 这是错误的(时间部分)。我需要加上 5 小时才能获得当前时间,所以我执行了以下操作。

let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd hh:mm:ss ZZZZZ"
let dateString = formatter.stringFromDate(NSDate.date())

结果是正确的日期 - 2014-09-25 06:21:56 +05:30

但是有一个小问题。这个日期是一个字符串,而不是 NSDate。我需要它是一个 NSDate 对象,以便将它与另一个日期进行比较。

我试过像这样把它转换回来,

let date = formatter.dateFromString(dateString)

我得到了错误的结果 - 2014-09-25 00:55:53 +0000。我尝试将日期字符串传递给新的 NSDateFormatter 以查看它是否有效,但我还是得到了错误的日期。

我的问题是,如何将这个日期字符串转换为一个 NSDate 对象,它也保留了正确的时间。

谢谢。

最佳答案

你对 NSDate 很困惑。

NSDate 是一个时间点。它没有时区信息。如果我们现在都调用 [NSDate date],我们将获得相同的 NSDate,即使你在印度而我在英国也是如此。那是故意的。这是同一时间。我的 watch 和你的 watch 显示的时间不一样,但是NSDate是一样的。您不能将 NSDate 转换为“印度”日期。

您使用日历和时区将 NSDates 转换为您以用户期望的方式显示给用户的字符串。那就是你所做的。您得到了一个对印度用户有意义的字符串。如果印度用户键入时间,您将获取该字符串并将其转换为 NSDate。 NSDate 将采用世界时。如果你和我现在都在我们的 watch 上输入时间并转换它,你会输入一个看起来比我的时间早 5 1/2 小时的时间。但这是同一时间。如果将它转换为 NSDate,我们将得到完全相同的 NSDate。

那么你如何改变你的 NSDate 呢?很简单:你不知道。 NSDate 是绝对时间,与你在地球上的位置无关。

关于ios - 从字符串中获取 NSDate 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26039329/

相关文章:

ios - Xcode 和 Cocoapods "No such module"错误

ios - 直接编辑 UITextField.text 属性 UITextFieldDelegate 不会触发

swift - 登录连接,方法 Get swift with API

swift - 当我在上面绘制文本时,NSImage 会调整大小

swift - 获取 Swift 中日期之间剩余的分钟数

ios - 全局设置特定时区供应用程序使用

ios - 删除 WithCompletionHandler 导致退出游戏中心

ios - 将 Swift 数组以外的其他内容用于传递给 OpenGL 缓冲区的可变固定大小线程安全数据

ios - 快速固定大小的数组

ios - 在数组中查找日期最接近当前时间的对象