[R] Default Format for Dates?

Gabor Grothendieck ggrothendieck at gmail.com
Fri Jun 10 22:49:13 CEST 2005


On 6/10/05, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:
> On 6/10/05, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:
> > On 6/10/05, khobson at fd9ns01.okladot.state.ok.us
> > <khobson at fd9ns01.okladot.state.ok.us> wrote:
> > >
> > >
> > >
> > >
> > > Is there anyway to preset date formats?  I have a date from a cover.dbf
> > > that is shown as this:
> > > > cover$FINALREPOR
> > > [1] "2003-06-24"
> > >
> > > The numeric value in cover$FINALREPOR is 12227.  I'd rather not create
> > > another vector to hold the properly formatted date.
> > >
> > > When I put this in a WordPerfect merge, I want the date to be June 24,
> > > 2003.   I could take care of the problem in a WordPerfect macro but I'd
> > > rather do it as an R default date format if possible.
> > >
> >
> > I am not entirely sure I understand what you are asking but I assume
> > you want a Date variable such that print, format and as.character,
> > when applied to it, produce default output of a prespecified format.
> >
> > Although I do not think Date will do that, chron can
> > associate a default format with a chron variable.
> >
> > library(chron)
> >
> > # custom format for a dates (i.e. chron) object
> > my.format <- function(x) format(as.Date(dates(x)), "%B %d %Y")
> >
> > # test data
> > my.Date <- Sys.Date() + 0:9
> >
> > # convert to chron and associate my.format to it
> > my.chron <- chron(unclass(my.Date), out.format = my.format)
> >
> > print(my.chron)
> > my.chron
> > as.character(my.chron)
> > format(my.chron)
> >
> > Note that you can find more information on chron and various
> > conversions in my article in RNews 4/1 and especially the table
> > at the end of that article.
> >
> 
> Here is a different solution that does not involve chron.  In this one
> we define a subclass of Date called mdy that has a default
> format as you specified implemented by defining print, as.character
> and format methods for it:
> 
> # define mdy methods
> print.mdy <- print.Date
> as.character.mdy <- format.mdy <- function(x, format = "%B %d %Y")
>        format(structure(x, class = "Date"), format = format)
> 
> # test data of class mdy (which is a subclass of Date)
> x <- Sys.Date() + 0:9
> class(x) <- c("mdy", "Date")
> 
> # test out print, format and as.character methods for class mdy
> print(x)
> format(x)
> as.character(x)
> x
> 

Actually there was no point in defining print.mdy and as.character.mdy
as further examination shows they both operate through format so the 
above can be simplified to just:


format.mdy <- function(x, format = "%B %d %Y")
       format(structure(x, class = "Date"), format = format)

# test data of class mdy (which is a subclass of Date)
x <- Sys.Date() + 0:9
class(x) <- c("mdy", "Date")

# test out print, format and as.character methods for class mdy
print(x)
format(x)
as.character(x)
x




More information about the R-help mailing list