Get date in current time zone in objective - c?

时间:2018-07-25 05:25:21

标签: objective-c iphone date nsdate nsdateformatter

NSArray *fromD = [setFreeHour valueForKey:@"fromDate"];
NSString *fromdate = fromD[0];
NSDateFormatter *fromDateFormatter = [[NSDateFormatter alloc]init];

[fromDateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
NSDate *fromDate = [fromDateFormatter dateFromString:fromdate];

Results :

  • In fromdate = 2018-07-24 11:41:25

  • In fromDate = 2018-07-24 06:11:25 +0000

So how can i get both the date (fromdate and fromDate) equal or fromDate in Local Time Zone

1 个答案:

答案 0 :(得分:0)

NSDate值表示一个时间点,而与该点的本地解释无关,即,当您在中午时分,在其他地方的午夜时分–同一时间点,不同的本地解释。

因此,当您比较日期时,会先将其转换为等效的NSDate表示形式。

要将文本格式的日期/时间转换为NSDate格式,请使用NSDateFormatter。如果您使用的文本格式没有指定时区,或者您设置了formatters时区属性,那么您的NSDateFormatter实例将使用在其运行的计算机上设置的当前本地时区。例如。如果您的代码的文本格式与结果NSDate之间的时差为5小时,那么我们可以推断出您使用的计算机位于当地时间UTC / GMT之前5小时

  

我需要比较这些日期。那我怎样才能使两个日期相等呢?

您完全按照自己的意愿进行操作,将文本格式转换为NSDate值,然后使用NSDate提供的方法比较这些值。那就是您不会“让两者相等”,而是将每个转换为它的时间点并进行比较。

HTH

顺便说一句:不建议使用变量名fromdatefromDate,它们的(小写)大写字母不同,这使得代码难以阅读,调试和维护。

问题后修改

您已经编辑了问题,以进一步询问如何在本地时区显示NSDate fromDate。答案与将文本格式转换为NSDate相同-使用NSDateFormatter, indeed you can use the exact same one. Insteading of using the method dateFromString:you used to get from text format you use stringFromDate:`转换为文本格式。上述关于时区的相同规则也适用。

如果您只是NSLog()一个NSDate值,您将获得它在UTC / GMT中表示的时间点。