2013-01-22 30 views
7

Tôi đã gặp phải điều gì đó không mong muốn khi làm việc với hàm strptime(). Định dạng của ngày tôi có bao gồm "1/22/2013 11:00:00 P.M". Định dạng tôi đang sử dụng cho điều này là "% m /% d /% Y% I:% M:% S% p".Chuỗi AM/PM không được nhận dạng đúng bởi strptime

Mã như sau.

strptime("1/22/2013 11:00:00 p.m",format="%m/%d/%Y %I:%M:%S %p") 
[1] NA 

nhưng nếu tôi sử dụng

strptime("1/22/2013 11:00:00 pm",format="%m/%d/%Y %I:%M:%S %p") 
[1] "2013-01-22 23:00:00" 

tôi nhận được kết quả phù hợp.

Vì vậy, tính năng này thiếu trong strptime để phát hiện p.m và các biến thể của nó như p.m. vv thay cho PM hoặc chiều. Đây có phải là một lỗi trong R?

Phiên bản R Tôi đang sử dụng R.14.2 trên windows 7 32-bit

+4

Xin ** rất ** thận trọng về hành vi ghi nhãn là "lỗi" trong bất kỳ ngôn ngữ lập. Nó luôn luôn hấp dẫn để đổ lỗi cho phần mềm, đặc biệt là một số gói phần mềm mới mà chúng tôi không quen thuộc, nhưng trên thực tế, những vấn đề này thực tế không bao giờ là lỗi. (Trừ khi đó là SAP, tất nhiên :-)) –

Trả lời

11

Đây không phải là lỗi, nhưng strptime hy vọng những thông tin một cách chuẩn hóa. %p là:

Chỉ báo AM/PM bằng ngôn ngữ. Được sử dụng cùng với ‘% I’ và không phải với ‘% H’. Chuỗi trống trong một số ngôn ngữ.

Trong ngôn ngữ của bạn, mã này được định nghĩa là AM/amPM/pm. R là một ngôn ngữ chính thức, và bạn cần phải tuân thủ các quy tắc mà nó áp đặt. Nếu bạn xác định hệ số với các cấp flavor, color, taste, bạn không thể mong đợi để có thể sử dụng colourflavour làm cách để tham khảo yếu tố này. Mặc dù nó có vẻ hiển nhiên đối với bạn rằng những điều này đại diện cho cùng một khái niệm, R là một ngôn ngữ chính thức mà không có sự linh hoạt của con người.

+2

để loại bỏ các dấu chấm: 'gsub (" [.] "," \\ 1 "," 1/22/2013 11:00:00 chiều ")' – Michael

2
library(lubridate) 
mdy_hms("01/22/2013 11:00:00 PM") 

Kết quả:

[1] "2013-01-22 11:00:00 UTC" 
+2

Trong trường hợp bất cứ ai đang tự hỏi, câu trả lời này dường như đang sử dụng gói "lubridate" – andrechalom

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