Tôi sử dụng chuỗi định dạng nào cho mili giây trong chuỗi ngày trên iPhone?


100

Tôi được yêu cầu phân tích cú pháp chuỗi ở định dạng bao gồm mili giây. Tôi sử dụng chuỗi định dạng nào để có giá trị ngày phù hợp?

Ví dụ: giả sử tôi có một chuỗi với giá trị sau: "2011-06-23T13: 13: 00.000"

Tôi chuyển chuỗi định dạng nào tới NSDateFormatter của mình trong đoạn mã sau?

NSString *dateValue = @"2011-06-23T13:13:00.000";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSString *formatString = @"yyyy-MM-dd'T'HH:mm:ss.???";
[formatter setDateFormat:formatString];
NSDate *date = [formatter dateFromString:dateValue];

Tôi sử dụng cái gì thay cho ??? trong đoạn mã trên?

Câu trả lời:


211

Đó là SSS, theo thông số Ngôn ngữ đánh dấu dữ liệu địa phương Unicode .

"yyyy-MM-dd'T'HH:mm:ss.SSS"

Nói một cách tổng quát hơn, hãy sử dụng bất kỳ số ký tự viết hoa S nào để nhận được nhiều chữ số thập phân đó trong thành phần phân số của một giây. ( ss.SVí dụ như vậy sẽ hiển thị thời gian chính xác đến phần mười giây.)


2
Tôi tự hỏi liệu bạn có biết làm thế nào để tôi có thể phân tích cú pháp một phần nghìn giây khoan dung không? Ngày có thể có 6, 7 hoặc thậm chí không có mili giây. Tôi có thể sử dụng các biểu thức chính quy nhưng tôi tự hỏi liệu điều này có thể được thực hiện ngay lập tức với một chuỗi định dạng thích hợp hay không.
Cyupa

Bằng cách này, số lượng S tối đa là ba, ví dụ như SSS. Nếu bạn thêm nhiều hơn, bạn chỉ nhận được các số không, ví dụ như timeIntervalSince1970 của 1415986217.544384 và .SSSSSS bạn nhận được .544000 vì vậy không phải là một giải pháp tuyệt vời.
malhal

@Cyupa Một mili giây chỉ bằng 1/1000 giây. 6 chữ số thập phân là micro giây và 1 chữ số thập phân là giây quyết định. - Sử dụng mili giây cho bất kỳ số thập phân nào cũng sai như sử dụng theo nghĩa đen cho một cái gì đó theo nghĩa bóng; bạn vẫn có thể làm điều đó, nhưng điều đó đang thay đổi nghĩa của từ.
Liggliluff


4

Bạn cần chuyển cùng một số 'S' ở cuối, ví dụ Ngày của tôi là '2015-11-17T03: 36: 45.041503Z' mà tôi đã sử dụng 'yyyy-MM-dd'T'HH: mm: ss.SSSSSSSz' định dạng, tôi có nghĩa là xem số 'S' là 6 là 6 chữ số sắp xuất hiện.


Những gì sẽ được định dạng để có nano giây tính bằng micro giây thay vì mili giây. Tôi đã thử với 'yyyy-MM-dd'T'HH: mm: ss.SSSSSSz' và 'yyyy-MM-dd'T'HH: mm: ss.SSSSSSSSSSz' và nó không hoạt động.
IndexOutOfDevelopersException

-1

sử dụng SSScho ba chữ số thập phân của một giây

"yyyy-MM-dd'T'HH:mm:ss.SSS"

Điều đó không thành công. Tôi không có ngày trở lại.
ageektrapped vào
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.