Цель-C: помочь мне преобразовать метку времени в форматированную дату / время - PullRequest
5 голосов
/ 22 сентября 2011

Я действительно изо всех сил пытаюсь преобразовать эту метку времени в красивую отформатированную строку даты.

Вот отметка времени: «1316625985»

А вот функция, которую я сделал:

-(NSString*)timestamp2date:(NSString*)timestamp{
    NSString * timeStampString =timestamp;
    //[timeStampString stringByAppendingString:@"000"];   //convert to ms
    NSTimeInterval _interval=[timeStampString doubleValue];
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:_interval];
    NSDateFormatter *_formatter=[[NSDateFormatter alloc]init];
    [_formatter setDateFormat:@"dd/MM/yy"];
    return [_formatter stringFromDate:date];
}

Беда в том, что даты возвращаются в 1972 году! (31/7/72) Это неправильно, так как это сентябрь 2011 года ...

Может кто-нибудь предложить какое-либо решение?

Большое спасибо заранее,

Ответы [ 5 ]

15 голосов
/ 22 сентября 2011

Разве не эпоха секунд с 01.01.1970? Вы уверены, что не оставили миллисекундную строку?

Когда я запустил вашу логику (без добавления строки в 000 для мс), это сработало. Вот что я сделал:

    NSString * timeStampString = @"1316641549";
    NSTimeInterval _interval=[timeStampString doubleValue];
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:_interval];
    NSLog(@"%@", date);

Выведено:

2011-09-21 17: 46: 14.384 Крэплет [13218: 707] 2011-09-21 21:45:49 + 0000

5 голосов
/ 16 июля 2015

Просто разделите ваше [timeStampString doubleValue] на тысячу, например:

NSDate *date = [NSDate dateWithTimeIntervalSince1970:[timeStampString doubleValue]/1000.0];
NSDateFormatter *_formatter=[[NSDateFormatter alloc]init];
[_formatter setDateFormat:@"dd/MM/yy"];
return [_formatter stringFromDate:date];

или попробуйте [timeStampString longLongValue] /1000.0 вместо

Удачи!

2 голосов
/ 22 сентября 2011

Вы можете передать [timeStampString doubleValue] непосредственно в dateWithTimeIntervalSince1970: вместо преобразования его в NSTimeInterval.

Кроме того, попробуйте добавить несколько операторов NSLog, чтобы увидеть, какие у вас значения в разных точках, что должно помочь отследить разницу.

Надеюсь, это поможет!

2 голосов
/ 22 сентября 2011

Проверяли ли вы, что строка (timestampString) и двойное значение (_interval) одинаковы и что doubleValue действительно учитывает все символы вашей строки?

Может быть, интерпретация строки в двойное значение обрезает значение?


Вы также уверены, что метка времени, которую вы интерпретируете, действительно является меткой времени UNIX, то есть она подсчитывает количество секунд, прошедших с 01/01/ 1970 (и не дни с 01.01.1970? ... или не секунды, а с другой даты?)

(Может быть, приведите пример значения метки времени, которую вы пытаетесь интерпретировать)

1 голос
/ 28 февраля 2013

При использовании NSInterval для получения интервала убедитесь, что отметка времени указана в секундах, а не в миллисекундах.Если это в миллисекундах, просто разделите значение NSInterval на 1000, а затем попробуйте форматирование.

...