mysql - 从未知时间戳转换为可读时间戳

标签 mysql ios objective-c ios7 timestamp

我在下面的列中包含从 .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/

相关文章:

MySQL - 按客户数量对订单计数进行分组

MySQL CASE WHEN THEN 空大小写值

iphone - UIWebView、Word办公文档及分页

objective-c - 禁用 WebView 中的拖动

php - 带条件的 MySQL UNION 查询

php - MySQLi PHP -> 使用获取数组时 LEFT JOIN 返回 Null

ios - 强制所有设备上的 IOS 对象大小相同

ios - 当我点击 searchBar 时,如何禁用 UISearchController.search Bar 的取消按钮?

iOS UIBarButtonItem 图标 : Facebook/Twitter/Email

objective-c - 何时在实现文件中包含#import