gpt4 book ai didi

ios - NSDate dateWithTimeIntervalSince1970 不返回 GMT/UTC 时间

转载 作者:行者123 更新时间:2023-11-28 19:23:03 25 4
gpt4 key购买 nike

我尝试了一个实验,因为我需要能够在我正在开发的应用程序中生成一个 unix 时间戳(自 1970 年以来)。

NSLog(@"Getting timeIntervalSince1970");
double theLoggedInTokenTimestampDateEpochSeconds = [[NSDate date] timeIntervalSince1970];

应该以 GMT(自 1970 年 1 月 1 日以来的秒数)返回纪元秒(自 1970 年以来)。然而,在 2011 年 8 月 15 日星期一 09:54:30 进行实验时,它返回 1313427270.504315

在我的 Mac OS 终端上用一个简单的 perl 单行代码测试它,我得到:perl -e 'print scalar(localtime(1313427270))' 返回 Mon Aug 15 09:54:30 2011 ...

当我在旧金山湾区并且我的本地时区设置为“Cupertino”时,这显然不是 GMT 时间。请问这是怎么回事,我该如何解决?我需要让我的应用程序在通信时向服务器发送 UTC 时间,这样无论用户身在何处,时间戳都会在一个相同的有效时区中发送。

在我的应用程序的另一部分,当用户从服务器请求数据时,它以 UTC 格式发送数据——将其转换为如下显示:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[NSLocale currentLocale]];
[dateFormatter setTimeZone:nil];
[dateFormatter setDateFormat:@"yyyyMMdd"];
NSDate *conversationDate = [NSDate dateWithTimeIntervalSince1970:[theConversationTimeStampString intValue]];
NSString *conversationDateString = [dateFormatter stringFromDate:conversationDate];
[dateFormatter release];

这工作得很好——在用户的时区和语言环境中显示更正的时间……所以我知道它是为传入的时间戳完成的。那么,第一个阻止它进入 GMT 的函数 (timeIntervalSince190) 我做错了什么?

谢谢

最佳答案

我不认为第一个功能实际上是错误的,尽管它表面上看起来可能是错误的。您从 timeIntervalSince1970 接收的时间间隔返回 GMT 时间间隔。相反,它返回现在和 1970 年 1 月 1 日 00:00:00 GMT 之间的时间间隔。这可能看起来有点挑剔,但它很重要:间隔值只不过是自固定时间点以来的秒数标量。间隔本身不在 GMT 中,只有它的固定引用点是。

我不懂 perl,但我快速搜索了有关本地时间的文档,它似乎需要任何时间并打印将标准日期类型转换为本地时间。这意味着您描述固定时间点的时间间隔会在该时间点转换回您的本地时间。当您从命令行显示它时,您将再次获得本地时间。因此,看到将绝对时间转换为本地时间是我希望看到的。

根据您的服务期望接收 UTC 时间的准确程度,您的时间间隔值可能工作正常。你有证据表明它不是基于你的终端检查以外的东西吗?

关于ios - NSDate dateWithTimeIntervalSince1970 不返回 GMT/UTC 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7068104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com