Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down at the end of May, and its replacement, statalist.org is already up and running.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: Extract date and time from a date/time variable


From   Nick Cox <njcoxstata@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: Extract date and time from a date/time variable
Date   Wed, 11 May 2011 18:08:48 +0100

There is various minor confusion here, although some can be put down
to careless wording.

Thus it is wrong, strictly (pedantically, if you prefer, but that's
not a pejorative in my vocabulary), to say that a value of a date-time
variable is

"01mar2011 11:56:00"

That is, rather, a value represented using a display format %tc. The
_value_ is a number, in this case more than a trillion,

. di %15.0f clock("1mar2011 11:56:00", "DMYhms")
  1614599760000

That formatted %tc is, as said,

. di %tc clock("1mar2011 11:56:00", "DMYhms")
01mar2011 11:56:00

Any way, always recalling that date-times are just numbers underneath
a format underlines that the time of day alone is just that date-time
MINUS the date-time the previous midnight. For _that_, the %tc format
is not appropriate as it shows a time on 1 January 1960, so you need a
different format, e.g.

. di %tc_hh:mm:SS clock("1mar2011 11:56:00", "DMYhms") -
clock("1mar2011 00:00:0 0", "DMYhms")
 11:56:00

In general, the previous midnight will be cofd(dofc(date_time)).

You could go the long way around, as Christian suggests, extracting
hours, minutes and seconds, and reconstructing the time that way, but
I can't think of a good reason to do that. Nor is it correct to
suppose that you might need some different way of representing times
alone.

Nick

On Wed, May 11, 2011 at 2:59 PM, Christian Holz (Stata list)
<statalist@holz.ca> wrote:

> Stata help under "whelp dates and times" reads as follows:
>
> Let t be a %tc variable.  The following functions will extract components of t:
>
>            ----------------------------------------------------------------
>                                        Result if t = tc(05jul1972-21:38:02)
>            Function         Returns         (i.e., t = 394,839,482,000)
>            ----------------------------------------------------------------
>            hh(t)            time of day, hours       21
>            mm(t)            time of day, minutes     38
>            ss(t)            time of day, seconds     2.000
>            ----------------------------------------------------------------
>
> Thus, you can extract the hours, minutes and seconds into new variables as
>
> generate hrs=hh(ActivityDate)
> generate mins=mm(ActivityDate)
> generate secs=ss(ActivityDate)
>
> I don't think the way Stata deals with date and time allows you to
> store times (i.e. as sort of a "time" data type) without a date, but
> you could generate (e.g. for display purposes) a string variable from
> these hrs, mins, secs variables or calculate a "seconds since
> midnight" variable.

Pinaki Mitra

>>    I have a date/time variable "ActivityDate" which is double and in %tc format. For example, a value of "ActivityDate" is "01mar2011 11:56:00". I need to extract date and time into two variables. I did gen ActivityDay=dofc( ActivityDate) and format ActivityDay %dN/D/Y which provided me the date as 03/01/11. What can I do to extract "11:56:00" into a new variable "ActivityTime"?

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/


© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index