<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=R_-_Dealing_with_Date_and_Time</id>
	<title>R - Dealing with Date and Time - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=R_-_Dealing_with_Date_and_Time"/>
	<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=R_-_Dealing_with_Date_and_Time&amp;action=history"/>
	<updated>2026-05-14T01:25:37Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://training-course-material.com/index.php?title=R_-_Dealing_with_Date_and_Time&amp;diff=52381&amp;oldid=prev</id>
		<title>Bernard Szlachta at 22:00, 14 February 2017</title>
		<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=R_-_Dealing_with_Date_and_Time&amp;diff=52381&amp;oldid=prev"/>
		<updated>2017-02-14T22:00:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Intro to R|020]]&lt;br /&gt;
&lt;br /&gt;
== Date format ==&lt;br /&gt;
Make sure that the &amp;#039;&amp;#039;hiredate&amp;#039;&amp;#039; in the &amp;#039;&amp;#039;emp&amp;#039;&amp;#039; dataframe is a &amp;#039;&amp;#039;Date&amp;#039;&amp;#039; type&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
 str(emp)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &amp;#039;data.frame&amp;#039;:	14 obs. of  8 variables:&lt;br /&gt;
 $ ID      : int  7839 7698 7782 7566 7654 7499 7844 7900 7521 7902&lt;br /&gt;
 ...&lt;br /&gt;
 $ HIREDATE: &amp;#039;&amp;#039;&amp;#039;Date&amp;#039;&amp;#039;&amp;#039;, format: &amp;quot;1981-11-17&amp;quot; ...&lt;br /&gt;
 ...&lt;br /&gt;
 $ DEPTNO  : int  10 30 10 20 30 30 30 30 30 20&lt;br /&gt;
&lt;br /&gt;
If it is not, covert it to the Date format&lt;br /&gt;
 emp$HIREDATE &amp;lt;- as.Date(emp$HIREDATE,format=&amp;quot;%d/%m/%Y&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
== Current Date ==&lt;br /&gt;
Get current date, current date and time and the system timezone:&lt;br /&gt;
 &amp;gt; Sys.Date()&lt;br /&gt;
 [1] &amp;quot;2012-04-15&amp;quot;&lt;br /&gt;
 &amp;gt; Sys.time()&lt;br /&gt;
 [1] &amp;quot;2012-04-15 03:20:45 BST&amp;quot;&lt;br /&gt;
 &amp;gt; Sys.timezone()&lt;br /&gt;
 [1] &amp;quot;BST&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Extracting part of the date ==&lt;br /&gt;
Which year do we have?&lt;br /&gt;
 &amp;gt; format(Sys.Date(),&amp;quot;%Y&amp;quot;)&lt;br /&gt;
 [1] &amp;quot;2012&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Use: %d for day, %m for months and ?Date (mind the upper case &amp;quot;D&amp;quot;) for more help&lt;br /&gt;
&lt;br /&gt;
== Calculating Intervals ==&lt;br /&gt;
&lt;br /&gt;
What will be the date in 8 weeks:&lt;br /&gt;
 &amp;gt; Sys.Date() + as.difftime(8,units=&amp;quot;weeks&amp;quot;)&lt;br /&gt;
 [1] &amp;quot;2012-06-10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
What is the employees seniority?&lt;br /&gt;
 &amp;gt; td &amp;lt;- Sys.Date() - emp$HIREDATE&lt;br /&gt;
 &amp;gt; data.frame(emp,Seniority=as.double(td/365.24))[,c(&amp;quot;ENAME&amp;quot;,&amp;quot;Seniority&amp;quot;)]&lt;br /&gt;
      ENAME Seniority&lt;br /&gt;
1      BUSH  35.24532&lt;br /&gt;
2     BLAIR  35.79290&lt;br /&gt;
3    MERKEL  35.68612&lt;br /&gt;
4     PUTIN  35.87230&lt;br /&gt;
5   CHIRACK  35.38221&lt;br /&gt;
6   BAROSSO  35.98456&lt;br /&gt;
7     GATES  35.43697&lt;br /&gt;
8   BUFFETT  35.20151&lt;br /&gt;
9    WALTON  35.97908&lt;br /&gt;
10    TOOSK  35.20151&lt;br /&gt;
11 THATCHER  36.16252&lt;br /&gt;
12 CARNEGIE  34.18574&lt;br /&gt;
13     FORD  34.09265&lt;br /&gt;
14   ELISON  35.06188&lt;br /&gt;
&lt;br /&gt;
== Exercises ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;17.  Exercise&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Compute job seniority (use format and as.integer )&lt;br /&gt;
&lt;br /&gt;
      ID    ENAME       JOB  MGR   HIREDATE  SAL COMM DEPTNO Seniority&lt;br /&gt;
 1  7839     BUSH PRESIDENT   NA 1981-11-17 5000   NA     10        31&lt;br /&gt;
 2  7698    BLAIR   MANAGER 7839 1981-05-01 2850   NA     30        31&lt;br /&gt;
 3  7782   MERKEL   MANAGER 7839 1981-06-09 2450   NA     10        31&lt;br /&gt;
 4  7566    PUTIN   MANAGER 7839 1981-04-02 2975   NA     20        31&lt;br /&gt;
 5  7654  CHIRACK  SALESMAN 7698 1981-09-28 1250 1400     30        31&lt;br /&gt;
 6  7499  BAROSSO  SALESMAN 7698 1981-02-20 1600  300     30        31&lt;br /&gt;
 7  7844    GATES  SALESMAN 7698 1981-09-08 1500    0     30        31&lt;br /&gt;
 8  7900  BUFFETT     CLERK 7698 1981-12-03  950   NA     30        31&lt;br /&gt;
 9  7521   WALTON  SALESMAN 7698 1981-02-22 1250  500     30        31&lt;br /&gt;
 10 7902    TOOSK   ANALYST 7566 1981-12-03 3000   NA     20        31&lt;br /&gt;
 11 7369 THATCHER     CLERK 7902 1980-12-17  800   NA     20        32&lt;br /&gt;
 12 7788 CARNEGIE   ANALYST 7566 1982-12-09 3000   NA     20        30&lt;br /&gt;
 13 7876     FORD     CLERK 7788 1983-01-12 1100   NA     20        29&lt;br /&gt;
 14 7934   ELISON     CLERK 7782 1982-01-23 1300   NA     10        30&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:white&amp;quot;&amp;gt;&lt;br /&gt;
curyear &amp;lt;- as.integer(format(Sys.Date(),&amp;quot;%Y&amp;quot;))&lt;br /&gt;
Seniority &amp;lt;- curyear - as.integer(format(emp$HIREDATE,&amp;quot;%Y&amp;quot;))&lt;br /&gt;
cbind(emp,Seniority)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;18.  *Exercise&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Compute job seniority (use &amp;quot;-&amp;quot; operator between dates).&lt;br /&gt;
&lt;br /&gt;
 +----------+-----------+&lt;br /&gt;
 | ename    | Seniority |&lt;br /&gt;
 +----------+-----------+&lt;br /&gt;
 | BUSH     |     25.14 |&lt;br /&gt;
 | BLAIR    |     25.69 |&lt;br /&gt;
 | MERKEL   |     25.59 |&lt;br /&gt;
 | PUTIN    |     25.78 |&lt;br /&gt;
 | CHIRACK  |     25.28 |&lt;br /&gt;
 | BAROSSO  |     25.89 |&lt;br /&gt;
 | GATES    |     25.33 |&lt;br /&gt;
 | BUFFETT  |     25.09 |&lt;br /&gt;
 | WALTON   |     25.88 |&lt;br /&gt;
 | TOOSK    |     25.09 |&lt;br /&gt;
 | THATCHER |     26.07 |&lt;br /&gt;
 | CARNEGIE |     24.06 |&lt;br /&gt;
 | FORD     |     23.97 |&lt;br /&gt;
 | ELISON   |     24.95 |&lt;br /&gt;
 +----------+-----------+ &lt;br /&gt;
&amp;lt;div style=&amp;quot;color:white&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
td &amp;lt;- Seniority &amp;lt;- Sys.Date() - emp$HIREDATE&lt;br /&gt;
cbind(emp,Seniority=td/365.25)[,c(&amp;quot;ENAME&amp;quot;,&amp;quot;Seniority&amp;quot;)]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;19.  Exercise&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Select employees hired before 1st of April 1981.&lt;br /&gt;
&lt;br /&gt;
 +----------+------------+&lt;br /&gt;
 | ename    | hiredate   |&lt;br /&gt;
 +----------+------------+&lt;br /&gt;
 | BAROSSO  | 1981-02-20 |&lt;br /&gt;
 | WALTON   | 1981-02-22 | &lt;br /&gt;
 | THATCHER | 1980-12-17 |&lt;br /&gt;
 +----------+------------+&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;20.  Exercise&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Select employees hired in January.&lt;br /&gt;
* Method 1: use format() function&lt;br /&gt;
* Method 2: use compound condition (date from date to)&lt;br /&gt;
&lt;br /&gt;
 +--------+------------+&lt;br /&gt;
 | ename  | hiredate   |&lt;br /&gt;
 +--------+------------+&lt;br /&gt;
 | FORD   | 1983-01-12 |&lt;br /&gt;
 | ELISON | 1982-01-23 |&lt;br /&gt;
 +--------+------------+&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;21.  Exercise&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Select the information below. Use ?format if needed.&lt;br /&gt;
hint&lt;br /&gt;
* apropos(&amp;quot;date&amp;quot;)&lt;br /&gt;
* ?format.Date&lt;br /&gt;
* ?strptime&lt;br /&gt;
&lt;br /&gt;
 +----------+--------------------------------------------+&lt;br /&gt;
 | ename    | When hired?                                |&lt;br /&gt;
 +----------+--------------------------------------------+&lt;br /&gt;
 | BUSH     |  was hired 17 of November 1981 Tuesday   |&lt;br /&gt;
 | BLAIR    |  was hired 1 of May 1981 Friday          |&lt;br /&gt;
 | MERKEL   |  was hired 9 of June 1981 Tuesday        |&lt;br /&gt;
 | PUTIN    |  was hired 2 of April 1981 Thursday      |&lt;br /&gt;
 | CHIRACK  |  was hired 28 of September 1981 Monday   |&lt;br /&gt;
 | BAROSSO  |  was hired 20 of February 1981 Friday    |&lt;br /&gt;
 | GATES    |  was hired 8 of September 1981 Tuesday   |&lt;br /&gt;
 | BUFFETT  |  was hired 3 of December 1981 Thursday   |&lt;br /&gt;
 | WALTON   |  was hired 22 of February 1981 Sunday    |&lt;br /&gt;
 | TOOSK    |  was hired 3 of December 1981 Thursday   |&lt;br /&gt;
 | THATCHER |  was hired 17 of December 1980 Wednesday |&lt;br /&gt;
 | CARNEGIE |  was hired 9 of December 1982 Thursday   |&lt;br /&gt;
 | FORD     |  was hired 12 of January 1983 Wednesday  |&lt;br /&gt;
 | ELISON   |  was hired 23 of January 1982 Saturday   |&lt;br /&gt;
 +----------+--------------------------------------------+&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;22.  Exercise*&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Show all employees hired 50 days before (inclusive) to 50 days after (inclusive) 28th February 1982&lt;br /&gt;
&lt;br /&gt;
 +--------+------------+&lt;br /&gt;
 | ename  | hiredate   |&lt;br /&gt;
 +--------+------------+&lt;br /&gt;
 | ELISON | 1982-01-23 |&lt;br /&gt;
 +--------+------------+&lt;br /&gt;
&lt;br /&gt;
== POSIX Time Format ==&lt;br /&gt;
&lt;br /&gt;
;POSIXct&lt;br /&gt;
# number of seconds since the start of January 1, 1970 (Unix Era)&lt;br /&gt;
# negative numbers - before Unix Era&lt;br /&gt;
&lt;br /&gt;
;POSIXlt&lt;br /&gt;
Is a vector of: &lt;br /&gt;
# seconds&lt;br /&gt;
# minutes&lt;br /&gt;
# hours&lt;br /&gt;
# day of month (1-31)&lt;br /&gt;
# month of the year (0-11)&lt;br /&gt;
# years since 1900&lt;br /&gt;
# day of the week (0-6 where 0 represents Sunday)&lt;br /&gt;
# day of the year (0-365)&lt;br /&gt;
# daylight savings indicator&lt;br /&gt;
&lt;br /&gt;
== ISOdatetime ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
   d1 =  ISOdate(1982,2,3)&lt;br /&gt;
   d2 =  ISOdate(1981,2,3)&lt;br /&gt;
   d1-d2&lt;br /&gt;
   Time difference of 365 days&lt;br /&gt;
   as.double(d1-d2)&lt;br /&gt;
   [1] 365&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
  dt1 =  ISOdatetime(1982,2,3,2,1,2)&lt;br /&gt;
  dt2 =  ISOdatetime(1982,2,3,12,1,2)&lt;br /&gt;
  dt1-dt2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 Time difference of -10 hours&lt;br /&gt;
&lt;br /&gt;
== Converting Charater to Time ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;rsplus&amp;quot;&amp;gt;&lt;br /&gt;
 d1 &amp;lt;- strptime(&amp;quot;2016-01-01 00:00:00&amp;quot;,&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
 d2 &amp;lt;- strptime(&amp;quot;2016-01-01 01:00:00&amp;quot;,&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Difference between ISOdate and ISOdatetime ==&lt;br /&gt;
Effectively ISOdate is ISOdatetime at 12:00:00 GMT&lt;br /&gt;
 &amp;gt; dt1 &amp;lt;- ISOdate(2016,1,1)&lt;br /&gt;
 &amp;gt; dt2 &amp;lt;- ISOdate(2016,1,1,12,00,00)&lt;br /&gt;
 &amp;gt; dt1&lt;br /&gt;
 [1] &amp;quot;2016-01-01 12:00:00 GMT&amp;quot;&lt;br /&gt;
 &amp;gt; dt2&lt;br /&gt;
 [1] &amp;quot;2016-01-01 12:00:00 GMT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Presentation of midnight&lt;br /&gt;
 &amp;gt; d1 &amp;lt;- strptime(&amp;quot;2016-01-01 00:00:00&amp;quot;,&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
 &amp;gt; d2 &amp;lt;- strptime(&amp;quot;2016-01-01 01:00:00&amp;quot;,&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&lt;br /&gt;
 &amp;gt; d1&lt;br /&gt;
 [1] &amp;quot;2016-01-01 CST&amp;quot;&lt;br /&gt;
 &amp;gt; d2&lt;br /&gt;
 [1] &amp;quot;2016-01-01 01:00:00 CST&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== difftime ==&lt;br /&gt;
Subtracting dates in normal ways can be implicitly converted to different number depend on how big is the interval&lt;br /&gt;
 &amp;gt; dt1 &amp;lt;- ISOdate(2016,1,1,12,00,00)&lt;br /&gt;
 &amp;gt; dt2 &amp;lt;- ISOdate(2016,1,1,12,00,07)&lt;br /&gt;
 &amp;gt; dt2 - dt1&lt;br /&gt;
 Time difference of 7 secs&lt;br /&gt;
 &amp;gt; as.double(dt2 - dt1)&lt;br /&gt;
 [1] 7&lt;br /&gt;
 &amp;gt; dt1 &amp;lt;- ISOdate(2016,1,1,12,00,00)&lt;br /&gt;
 &amp;gt; dt2 &amp;lt;- ISOdate(2116,1,1,12,00,07)&lt;br /&gt;
 &amp;gt; dt2 - dt1&lt;br /&gt;
 Time difference of 36524 days&lt;br /&gt;
 &amp;gt; as.double(dt2 - dt1)&lt;br /&gt;
 [1] 36524&lt;br /&gt;
 &amp;gt; difftime(dt2,dt1)&lt;br /&gt;
 Time difference of 36524 days&lt;br /&gt;
 &amp;gt; difftime(dt2,dt1,units=&amp;quot;sec&amp;quot;)&lt;br /&gt;
 Time difference of 3155673607 secs&lt;br /&gt;
&lt;br /&gt;
== Setting up timezone ==&lt;br /&gt;
 ISOdate(2016,1,1,12,00,00,tz = &amp;quot;CST&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Bernard Szlachta</name></author>
	</entry>
</feed>