2011-08-18 27 views
6

Tại sao điều này ...Vấn đề chuyển đổi Ruby on Rails DateTime để NSDate

NSString *mydate = @"2011-07-20T23:59:00-07:00" 

    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; 

    NSLog(@"%@", [[dateFormatter dateFromString:mydate] description]); 

... trở về "(null)" trong giao diện điều khiển?

Trả lời

13

Định dạng ngày của bạn là @"yyyy-MM-dd'T'HH:mm:ss'Z'" có nghĩa là tìm kiếm ký tự "Z" ở cuối chuỗi. Tuy nhiên, chuỗi của bạn là:

@"2011-07-20T23:59:00-07:00" 

Tôi không thấy "Z" ở đó, phải không? Do đó, ngày trở lại là nil vì chuỗi của bạn không khớp với định dạng được chỉ định.

Theo Date Formatting Patterns documentation, có lẽ bạn đang tìm kiếm các chuỗi định dạng của:

@"yyyy-MM-dd'T'HH:mm:ssZZ" 

Tuy nhiên, ngay cả rằng thể không làm việc, bởi vì nếu bạn nhận thấy chuỗi nguồn của bạn có dấu hai chấm (" : ") ở giữa giờ và phút bù đắp múi giờ. Không có trình chỉ định múi giờ nào tính toán điều đó. Nếu đó thực sự là định dạng trong đó ROR trả về ngày, thì ROR là sai.

+0

Thật không may Rails đang làm việc đó ... trở về -07: 00 thay vì -0700. Điều này kinda sucks. Lấy ra đại tràng và tất cả đều tốt. – wgpubs

+1

@wgpubs nếu bạn xóa tất cả các dấu hai chấm, bạn có thể sử dụng '@" yyyy-MM-dd'T'HHmmssZZ "' làm chuỗi định dạng của bạn. –

+0

Tôi đã đi với một cái gì đó tương tự ... loại bỏ các dấu hai chấm cuối cùng từ chuỗi (nó luôn luôn ở vị trí tương tự với độ dài của chuỗi). Giải pháp của bạn có vẻ dễ dàng hơn và dễ hiểu hơn, vì vậy tôi có thể đi với nó. Cảm ơn – wgpubs

0

Tôi đang chuyển các Ngày từ Ruby sang iOS thông qua API JSON và tôi tin rằng tôi đã đọc cùng một bài viết.

http://www.cimgf.com/2012/05/29/importing-data-made-easy/

Tôi gần như tích cực mà họ đã nhầm lẫn thêm 'Z' là một chuỗi chữ

-

Để có được Ruby để đầu ra như bạn có lẽ mong đợi tôi đã làm như sau:

1.9.3-p392 :012 > s = Time.now 
    => 2013-05-03 15:47:51 +0100 
1.9.3-p392 :013 > s.strftime("%Y-%m-%d\T%H:%M:%S%:z") 
    => "2013-05-03T15:47:51+01:00" 

Thông báo các%: z mà có sẵn trong Ruby 1.9.3 ít nhất

Is there a Ruby 1.8.7 time.strftime %z bug?