When I try to parse a timestamp in the following format: "Thu Nov 8 15:41:45 2012", only NA
is returned.
I am using Mac OS X, R 2.15.2 and Rstudio 0.97.237. The language of my OS is Dutch: I presume this has something to do with it.
When I try strptime
, NA
is returned:
var <- "Thu Nov 8 15:41:45 2012"
strptime(var, "%a %b %d %H:%M:%S %Y")
# [1] NA
Neither does as.POSIXct
work:
as.POSIXct(var, "%a %b %d %H:%M:%S %Y")
# [1] NA
I also tried as.Date
on the string above but without %H:%M:%S
components:
as.Date("Thu Nov 8 2012", "%a %b %d %Y")
# [1] NA
Any ideas what I could be doing wrong?
I think it is exactly as you guessed, strptime
fails to parse your date-time string because of your locales. Your string contains both abbreviated weekday (%a
) and abbreviated month name (%b
). These time specifications are described in ?strptime
:
Details
%a
: Abbreviated weekday name in the current locale on this platform
%b
: Abbreviated month name in the current locale on this platform."Note that abbreviated names are platform-specific (although the standards specify that in the
C
locale they must be the first three letters of the capitalized English name:""Knowing what the abbreviations are is essential if you wish to use
%a
,%b
or%h
as part of an input format: see the examples for how to check."See also
[...]
locales
to query or set a locale.
The issue of locales
is relevant also for as.POSIXct
, as.POSIXlt
and as.Date
.
From ?as.POSIXct
:
Details
If
format
is specified, remember that some of the format specifications are locale-specific, and you may need to set theLC_TIME
category appropriately viaSys.setlocale
. This most often affects the use of%b
,%B
(month names) and%p
(AM/PM).
From ?as.Date
:
Details
Locale-specific conversions to and from character strings are used where appropriate and available. This affects the names of the days and months.
Thus, if weekdays and month names in the string differ from those in the current locale, strptime
, as.POSIXct
and as.Date
fail to parse the string correctly and NA
is returned.
However, you may solve this issue by changing the locales
:
# First save your current locale
loc <- Sys.getlocale("LC_TIME")
# Set correct locale for the strings to be parsed
# (in this particular case: English)
# so that weekdays (e.g "Thu") and abbreviated month (e.g "Nov") are recognized
Sys.setlocale("LC_TIME", "en_GB.UTF-8")
# or
Sys.setlocale("LC_TIME", "C")
#Then proceed as you intended
x <- "Thu Nov 8 15:41:45 2012"
strptime(x, "%a %b %d %H:%M:%S %Y")
# [1] "2012-11-08 15:41:45"
# Then set back to your old locale
Sys.setlocale("LC_TIME", loc)
With my personal locale I can reproduce your error:
Sys.setlocale("LC_TIME", loc)
# [1] "fr_FR.UTF-8"
strptime(var,"%a %b %d %H:%M:%S %Y")
# [1] NA