我在下面的列中包含从 .sqlite
文件中检索到的时间戳,
这些时间戳的格式是什么?如何将它们转换成可读的时间戳?
实际上,如果我知道所显示的时间戳的格式,我就能弄清楚其余部分。
我尝试将其粘贴到在线时间戳转换工具中,但转换器无法识别特定格式。
我最初认为时间戳的格式为 YYYYMMDDHHMMSS.uuuuuu
但数字的长度与格式的长度不对应,所以我在这个问题上摸不着头脑
有什么帮助吗?
更新 1
这些时间戳与消息相对应,因此很明显,该时间戳中必须至少保留分钟和秒数。
更新 2
这些时间戳来 self 从 .sqlite 文件中检索到的消息传递应用程序
更新 3
根据提供的其他列(例如名称和消息),我能够验证时间戳是否与应用程序内的消息时间戳相关,到 11/28/2012 10:48am
我是无法验证秒数。
最佳答案
这些是自某个时间以来经过的秒数。通常 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
前两个时间戳。请检查,这是否是应用程序中显示的日期。
结论:
数据库保存 double 值来表示自 1.1.2001 0:00 GMT 以来经过的秒数,这在 Mac (OS X) 世界中称为“引用日期”。该列不包含具有特定格式的字符串。
关于mysql - 从未知时间戳转换为可读时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21129581/