【问题标题】:What is the correct way of showing a timestamp in device timezone?在设备时区显示时间戳的正确方法是什么?
【发布时间】:2015-11-04 13:32:35
【问题描述】:

我有这个时间戳: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]);

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

我应该在上面的代码中添加什么,以便它始终根据我们的设备时区向我们显示正确的时间?

【问题讨论】:

    标签: ios timezone timestamp nsdate utc


    【解决方案1】:

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

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

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

    已编辑:-

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

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

    【讨论】:

    • NSDate.date.timeIntervalSince1970 - 此方法返回相对于当前日期(格林威治标准时间)和 1970 年 1 月 1 日(格林威治标准时间)之间的绝对参考日期的时间值,因此您没有设置任何时区在创建时
    • @hagile 你可以查看我编辑的帖子。希望对你有所帮助。
    【解决方案2】:

    好的,我发现,上面的日期和时间是正确的。在 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 小时)。所以我问的问题的结果似乎很纯粹:)

    【讨论】:

    • 亲爱的投反对票的人,请告诉我投反对票的原因。
    猜你喜欢
    • 2014-03-16
    • 2014-06-09
    • 2014-01-07
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多