在设备时区中显示时间戳的正确方法是什么?

时间:2015-08-12 05:35:58

标签: ios timezone timestamp nsdate utc

我有这个时间戳:1439353372

  

这是在我们的一位用户(来自加拿大)向我发送消息(在印度)时生成的。

在我们的应用程序中 - 他看到了该消息的时间:2015-08-11 / 22:22pm我看到了2015-08-12 / 09:52am。他在iPhone6中看到了这个,我在iPhone6 +模拟器上。

我认为这次错了 - 我对这个时间戳/时区和日期转换感到非常困惑。

以下是我们将时间戳转换为日期并以上述格式显示的代码。

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd"];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:1439353372];
NSString *strDate = [df stringFromDate:date];
[df setDateFormat:@"HH:mm a"];
NSString *strTime = [df stringFromDate:date];
NSLog(@"%@",[NSString stringWithFormat:@"%@ / %@", strDate, strTime]);

我不确定这是在用户所在地区显示特定时间戳日期的正确方法吗?

我应该在上面的代码中添加什么内容,以便它始终按照我们的设备时区显示适当的时间?

2 个答案:

答案 0 :(得分:0)

创建时间戳时,请添加本地时区: -

NSTimeZone *localTimeZone = [NSTimeZone systemTimeZone];
[df setTimezone: localTimeZone];

在检索时间戳时,请采用相同的方法,以便根据您的时区获得正确的日期和时间。

<强> EDITED: -

这是您在日期戳中添加时区的方法,只是从Source找到时区,因为我现在没有时间编写代码

   NSDate* referenceDate = [NSDate dateWithTimeIntervalSince1970: 0];
   NSTimeZone* timeZone = [NSTimeZone systemTimeZone];
   int offset = [timeZone secondsFromGMTForDate: referenceDate];
   int current = unix_timestamp - offset;

答案 1 :(得分:0)

好的,我发现,上述日期和时间是正确的。在GMT中,如果您将上述时间戳转换为NSDate,您将获得以下结果:2015-08-12 / 04:22pm。因此,加拿大时区为GMT-6(距离2015-08-12 / 04:22pm时间6小时),印度为GMT+5.30(距2015-08-12 / 04:22pm时间提前5.30小时)。所以我问的问题的结果似乎是纯粹的:)