在将此问题标记为重复之前,请继续阅读。
我需要比较两个 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/