iPhone: преобразование Oracle Timestamp в NSDate или Unix Timestamp (например, double)

Есть ли хороший и простой способ преобразовать временную метку Oracle в объект NSDate на iPhone? Я попросил своего клиента предоставить мне БД с отметками времени как Unix Timestamp (удваивается с 0 = начало 1970 года), но для них это проблема. Спасибо.

Примечание. Вы можете легко преобразовать временную метку Unix в NSDate с помощью

[NSDate dateWithTimeIntervalSince1970: timestamp]  // timestamp is a "double"

Что мне нужно сделать, так это преобразовать временную метку Oracle в двойную, также известную как временная метка Unix. Остальное легко.

Дополнительная информация: мне нужен код Objective-C для запуска на iPhone с использованием строк NSString, представляющих даты в формате Oracle Timestamp. Другой поток StackOverflow предлагает использовать NSDateFormatter , но я не знаю, какой формат использовать, и метод инициализации форматтера, предложенный в этом потоке, выдает мне предупреждение.


person Amagrammer    schedule 24.02.2010    source источник


Ответы (3)


Я не уверен насчет преобразования в NSDate, но вы можете легко преобразовать дату Oracle в временную метку unix. Следующий фрагмент SQL сделает это:

(my_date - to_date('01/01/1970','DD/MM/YYYY')) * 86400
person a'r    schedule 24.02.2010
comment
Извините, но я не совсем понимаю контекст этого. to_date не является функцией iPhone SDK. (И см. исходный пост для части NSDate.) - person Amagrammer; 24.02.2010
comment
@Amagrammer: to_date() — это функция Oracle в SQL. Ar предполагает, что вы запустите этот фрагмент в базе данных Oracle через SQL при извлечении значения даты, или пусть ваш клиент запустит это и выдаст вам этот вывод вместо даты Oracle. - person Doug Porter; 24.02.2010
comment
Извинения не нужны. Однако на самом деле я не работаю с БД Oracle. Скорее, я работаю с базой данных SQLite, которую я создам на iPhone из данных, полученных со страницы PHP. Мне нужен код Objective-C для работы на iPhone. - person Amagrammer; 24.02.2010
comment
Я собираюсь принять этот ответ как лучшее решение, даже несмотря на то, что мне нужно попросить клиента сделать работу за меня, используя метод, который предлагает ar. Спасибо - person Amagrammer; 05.03.2010

Похоже, мне лучше всего использовать следующее:

NSDateFormatter* formatter = [[NSDateFormatter alloc] init];    
[formatter setDateFormat:@"MM/dd/yyyy HH:mm a"];

Я не уверен, насколько сильно различаются временные метки Oracle, поэтому, если есть проблема с вышеуказанным подходом, я хотел бы знать.

Спасибо за другие ответы. Я оставлю вопрос открытым, чтобы предложить другие подходы.

person Amagrammer    schedule 24.02.2010
comment
И тогда вы бы завершили этот подход следующим образом: NSDate date = [formatter dateFromString:dateString]; - person arlomedia; 12.04.2012

Жаль, что вы уже приняли этот ответ, но это лучший способ сделать это:

NSDate *dateTraded = [NSDate dateWithTimeIntervalSince1970 :[timestampVal integerValue]];

... где timestampVal — это объект NSString, представляющий значение временной метки.

person PostCodeism    schedule 04.02.2011
comment
Как он узнает, является ли строка timestampVal MM/dd/yyyy или dd/MM/yyyy? - person Amagrammer; 05.02.2011