我在下面的列中包含从.sqlite
文件
这些时间戳的格式是什么,以及如何从它们转换为可读的时间戳?
实际上,如果我知道显示时间戳的格式,我可以弄清楚剩下的。
我已尝试在线时间戳转换工具中粘贴此内容,但转换器无法识别特定格式。
我最初认为时间戳的格式为YYYYMMDDHHMMSS.uuuuuu
,但数字的长度与格式的长度不对应,所以我在这个问题上摸不着头脑
任何帮助?
更新1
这些时间戳对应于消息,因此显然必须至少保留该时间戳中保留的分钟和秒数。
更新2
这些时间戳来自我从 .sqlite 文件中检索到的消息传递应用程序
更新3
根据提供的其他列(如姓名和消息),我能够验证时间戳与应用程序内的消息时间戳相关11/28/2012 10:48am
我无法验证秒数。
答案 0 :(得分:3)
这些是从某个时间开始经过的秒数。通常1970年1月1日0:00是第一秒。但在这种情况下,它将是一个没有多大意义的日期,因为第一个时间戳将是Sat, 28 Nov 1981 10:48:55 GMT
。告诉我们应用程序显示的第一个时间戳,并且很容易计算参考日期。
可能是2001年1月1日,因为它是另一个经常使用的参考日期。即在Mac OS X和iOS上。
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:timestampFromDB];
我写了一个测试程序。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSTimeInterval intervals[] = {375792535.395, 375792980.868017};
for (int i = 0; i < sizeof(intervals)/sizeof(intervals[0]); ++i) {
NSTimeInterval interval = intervals[i];
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:interval];
NSLog(@"%@", date);
}
}
return 0;
}
日志:
2012-11-28 10:48:55 +0000
2012-11-28 10:56:20 +0000
前两个时间戳。请检查,如果这是应用程序中显示的日期。
结论:
数据库包含双倍值,表示自1.1.2001 0:00 GMT以来经过的秒数,即Mac(OS X)世界中所谓的“参考日期”。该列不包含具有特定格式的字符串。
答案 1 :(得分:1)
如果第二个是自1970年以来你可以使用+ (instancetype)dateWithTimeIntervalSince1970:(NSTimeInterval)seconds:
NSLog(@"%@",[NSDate dateWithTimeIntervalSince1970:375792535.395])
输出:
1981-11-28 10:48:55 +0000
似乎你的第二个是自2001年以来(正如 @vikingosegundo 在他的回答中提到的那样),所以你可以使用
+(instancetype)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)seconds
示例:
NSLog(@"%@", [NSDate dateWithTimeIntervalSinceReferenceDate:375792535.395]);
输出:
2012-11-28 11:24:51 +0000
然后您可以使用NSDateFormatter格式化所需格式的日期。