2011-09-21 47 views
5

Tôi thực sự đang cố gắng chuyển đổi dấu thời gian này thành chuỗi ngày được định dạng đẹp.Mục tiêu-C: giúp tôi chuyển đổi dấu thời gian thành ngày/giờ được định dạng

Đây là dấu thời gian: "1316625985"

Và đây là chức năng tôi đã thực hiện:

-(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]; 
} 

Vấn đề là, nó giữ ngày trở lại vào năm 1972! (31/7/72) Điều này sai, vì đó là ngày tháng 9 năm 2011 ...

Có ai đề xuất bất kỳ giải pháp nào không?

Nhiều cảm ơn trước,

+0

Bạn đã thử làm việc với NSCalendar và NSDateComponents để tạo đối tượng ngày của bạn? Đó là cách tôi đã làm nó trong quá khứ. –

+0

Bạn đã giải quyết xong điều này chưa? – bryanmac

Trả lời

2

Bạn có kiểm tra xem chuỗi (timestampString) và giá trị kép (_interval) là giống nhau và rằng doubleValue có thực sự lấy tất cả các ký tự trong chuỗi của bạn không?

Có thể việc giải thích chuỗi thành hai vụ mùa giá trị?


Bạn cũng chắc chắn rằng dấu thời gian bạn đang interpretting thực sự là một dấu thời gian UNIX, có nghĩa là nó đếm số giây trôi qua kể từ 01/01/1970 (và không phải ngày kể từ ngày 01/01/1970? ... hay không giây nhưng kể từ ngày khác?)

(có thể đưa ra một ví dụ về giá trị của dấu thời gian bạn đang cố gắng để giải thích)

+0

Ông đã đưa ra một ví dụ về dấu thời gian ở trên. Tôi đã thử nó và chuỗi & đôi là như nhau vì vậy đó không phải là nó. – bryanmac

14

là không Epoch giây từ 1970/01/01? bạn có chắc chắn rằng bạn không rời khỏi dòng mili giây không?

Khi tôi chạy bạn đang logic (không có dòng của bạn nối thêm 000 cho ms), nó hoạt động. Dưới đây là những gì tôi đã làm:

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

Nó outputted:

2011/09/21 17: 46: 14,384 Craplet [13.218: 707] 2011/09/21 21:45:49 +0000

+0

Ok cảm ơn. Tôi đang ngủ ở đây. Tôi sẽ phải nhìn vào nó vào buổi sáng. Tôi sẽ có những giấc mơ hạnh phúc ngay bây giờ! – Eamorr

+0

Cool - đăng xuất ngày như tôi đang làm ở trên chỉ để đảm bảo rằng bạn không gặp phải một số vấn đề định dạng ... – bryanmac

2

bạn có thể vượt qua [timeStampString doubleValue] trực tiếp vào dateWithTimeIntervalSince1970: thay vì chuyển đổi nó thành một NSTimeInterval.

Ngoài ra, hãy thử thêm một số câu lệnh NSLog để xem giá trị của bạn ở các điểm khác nhau, điều đó sẽ giúp theo dõi sự khác biệt ở đâu.

Hy vọng điều này sẽ hữu ích!

1

Trong khi sử dụng NSInterval để nhận khoảng thời gian, hãy đảm bảo dấu thời gian bằng giây và không phải là mili giây. Nếu nó bằng mili giây, chỉ cần chia giá trị NSInterval cho 1000 và sau đó thử định dạng.

4

Chỉ cần chia [timeStampString doubleValue] của bạn bằng một ngàn như:

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

hoặc thử [timeStampString longLongValue] /1000.0 thay

Good Luck!

Các vấn đề liên quan