AM/PM string is not properly recognized by strptime

pmehrotra picture pmehrotra · Jan 22, 2013 · Viewed 13.9k times · Source

I have encountered something unexpected while working with the function strptime(). The format of the date I have consists of "1/22/2013 11:00:00 P.M" . The format I am using for this is "%m/%d/%Y %I:%M:%S %p".

The code is as follows.

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

but if I use

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

I get the appropriate result.

So does this feature lack in strptime to detect p.m and its variations such as p.m. etc in place of PM or pm. Is this a bug in R ?

The version of R I am using R.14.2 on windows 7 32-bit

Answer

Paul Hiemstra picture Paul Hiemstra · Jan 22, 2013

This is no bug, but strptime expects the information in a standardised way. %p is:

AM/PM indicator in the locale. Used in conjunction with ‘%I’ and not with ‘%H’. An empty string in some locales.

In you locale this is defined as AM/am and PM/pm. R is a formal language, and you need to stick to the rules it imposes. If you define a factor with levels flavor, color, taste, you cannot expect to be able to use colour and flavour as ways to refer to this factor. Even though it seems obvious to you that these represent the same concept, R is a formal language without human flexibility.