Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AM/PM string is not properly recognized by strptime

Tags:

r

strptime

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

like image 649
pmehrotra Avatar asked Jan 22 '13 09:01

pmehrotra


People also ask

What does Strptime mean?

The strptime() function converts the character string pointed to by buf to values which are stored in the tm structure pointed to by tm, using the format specified by format. The format is composed of zero or more directives.

How do I use Strftime and Strptime in Python?

Python time strptime() MethodThe format parameter uses the same directives as those used by strftime(); it defaults to "%a %b %d %H:%M:%S %Y" which matches the formatting returned by ctime(). If string cannot be parsed according to format, or if it has excess data after parsing, ValueError is raised.

How does Strptime work in R?

strptime turns character representations into an object of class "POSIXlt" . The time zone is used to set the isdst component and to set the "tzone" attribute if tz != "" . If the specified time is invalid (for example '⁠"2010-02-30 08:00"⁠') all the components of the result are NA .


1 Answers

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.

like image 78
Paul Hiemstra Avatar answered Jan 03 '23 13:01

Paul Hiemstra