2010-01-04 2 views
10

Có cách nào dễ dàng để chuyển đổi dấu thời gian bạn nhận được từ twitter thành thời gian unix hoặc phút kể từ bây giờ không? Tôi có thể phân tích cú pháp thông qua các chuỗi và chuyển đổi tất cả mọi thứ bản thân mình nhưng tôi hy vọng có một cách để chuyển đổi mà không cần điều đó. Dưới đây là ví dụ về phần tử created_at có dấu thời gian.iPhone + Twitter API: Thời gian chuyển đổi?

Sun Mar 18 06:42:26 +0000 2007

Trả lời

22

Bạn có thể sử dụng NSDateFormatter với một cái gì đó như thế này:


NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
[dateFormatter setLocale:usLocale]; 
[usLocale release]; 
[dateFormatter setDateStyle:NSDateFormatterLongStyle]; 
[dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; 

// see http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns 
[dateFormatter setDateFormat: @"EEE MMM dd HH:mm:ss Z yyyy"]; 

NSDate *date = [dateFormatter dateFromString:[currentDict objectForKey:@"created_at"]]; 
[dateFormatter release]; 

NSTimeInterval seconds = [date timeIntervalSince1970]; 
+0

Cảm ơn bạn, hoạt động hoàn hảo! – self

+2

Đây cũng là một phần sai lầm! Việc tạo ra một đối tượng NSDateFormatter là khá nặng, do đó, làm cho nó trở thành tĩnh hoặc làm cho nó trở thành một ivar bất cứ khi nào có thể. –

0

Gửi yêu cầu tính năng với Apple và cho họ biết bạn muốn chức năng này trên iPhone. NSDateFormatter cung cấp một phương thức init có một cờ boolean cho biết bạn muốn nó phân tích ngôn ngữ tự nhiên, nhưng nó chỉ có sẵn trên OS X. Wil Shipley đã viết interesting post một thời gian trước về chức năng này trong bối cảnh của heuristics và các yếu tố con người.

Nó dường như không có khả năng Apple sẽ cung cấp chức năng này như ghi chú này sẽ chỉ ra từ NSDateFormatter docs:

iPhone OS Lưu ý: iPhone OS hỗ trợ chỉ hành vi 10.4+. 10.các phương thức và chuỗi định dạng không phải là có sẵn trên iPhone OS.

Nói cách khác, tôi nghĩ bạn sẽ phải phân tích cú pháp đó.

0

Có vẻ như bạn cần một cái gì đó như: ISO 8601 parser and unparser.

+0

Định dạng của ví dụ được cung cấp trong câu hỏi không phải là ISO 8601. –

2

Tôi đã được strugeling với điều này cả ngày, nhưng chủ đề này giúp tôi tìm một giải pháp.

Đây là cách tôi chuyển đổi thuộc tính "created_at" Twitter thành NSDATE;

NSDateFormatter *fromTwitter = [[NSDateFormatter alloc] init]; 
// here we set the DateFormat - note the quotes around +0000 
[fromTwitter setDateFormat:@"EEE MMM dd HH:mm:ss '+0000' yyyy"]; 
// We need to set the locale to english - since the day- and month-names are in english 
[fromTwitter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en-US"]]; 

NSString *dateString = [item objectForKey:@"created_at"]; 
NSDate *tweetedDate = [fromTwitter dateFromString:dateString]; 

Tôi hy vọng một người nào đó sẽ thấy điều này hữu ích.

+0

ZOMG cảm ơn bạn nó hoạt động! Tìm thấy 5 định dạng khác không hoạt động. Chìa khóa có vẻ là ngôn ngữ mà mọi người khác dường như đã bỏ lỡ. –