2014-01-15 4 views
0

я имею ниже столбец, содержащий временные метки, извлекаемые из .sqlite файла,Преобразование из неизвестной временной метки в читаемый метку времени

какой формат эти метки времени в и как можно конвертировать из них в машиночитаемом отметка времени?

На самом деле, если бы я знал формат показанной метки, я мог бы выяснить остальное.

Я пробовал вставлять это в инструменты преобразования времени, но конвертер не может определить конкретный формат. Я предположил, что временная метка была в формате YYYYMMDDHHMMSS.uuuuuu, но длина цифр не соответствует длине формата, поэтому я царапаю свою голову на этом

Любая помощь?

Update 1

Эти временные метки соответствуют сообщениям, чтобы его очевидным, что должно быть зарегистрировано не менее минуты и секунды сохранившие в этой временной метки.

Update 2

Эти timesstamps пришли из приложения обмена сообщениями, который я извлеченной из файла .sqlite

Update 3

на основе дополнительных столбцов при условии, такие как имя и сообщение, я смог проверить, что временная метка коррелирует с меткой времени сообщения внутри приложения до 11/28/2012 10:48am. Я не смог проверить секунд.

+0

Вы даже не указали, откуда берутся ваши данные, и вы спрашиваете, в каком формате ваши данные? Duhhhh ... –

+0

@BlueTomato Извините, это произошло из приложения-помощника для обмена сообщениями. Я заглянул в файл .sqlite и нашел этот столбец. – Pavan

+0

Эти цифры не являются полными секундами с января 1970 года, если даты в начале 1980-х годов ничего не означают для вас. Так кто знает !? –

ответ

3

это секунды, прошедшие с определенного времени. Обычно 1 января 1970 года 0:00 - первая секунда. но в этом случае это будет дата, которая не имеет большого смысла, поскольку первая временная метка будет Sat, 28 Nov 1981 10:48:55 GMT. Сообщите нам, что приложение показывает для метки времени в кулак, и будет легко рассчитать контрольную дату.

возможно 1 января 2001 года, так как это другой часто используется ссылочная дата. т.е. на 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, что называется "Reference Date" в (OS X) мире Mac. Столбец не содержит строку с определенным форматом.

+0

Таким образом, отметка времени представляет собой количество секунд, прошедших с 1.1.2001 0: 00GMT, называемое «ссылочной датой» и не является форматом! Это действительно круто @vikingosegundo! Я проверил приложение, и после моих результатов я подтвердил, что полученные журналы соответствовали метке времени в графическом интерфейсе. Поэтому он определенно ссылается на указанную вами референтную дату! Еще раз спасибо – Pavan

1

Вы можете использовать + (instancetype)dateWithTimeIntervalSince1970:(NSTimeInterval)seconds, если второй является с 1970 года:

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 для форматирования даты в нужном формате.

+0

Возможно, вы отключитесь на 31 год – vikingosegundo

+0

@vikingosegundo: соответствующее время для данной отметки времени - это дата, но если он использует какой-то другой год (не 1970) в качестве контрольной даты, тогда вы правы. –

+1

Когда он говорит, что данные поступают из приложения для сообщений, каковы шансы, что эти цифры являются полными секундами с января 1970 года? Близко к 0 ... –

Смежные вопросы