{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Days and Dates\n", "\n", "This notebook (a) introduces the Date type; (b) discusses how to convert from one date format (for instance, Excel and Matlab) to Julia dates; (c) and how to do date arithmetics." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load Packages and Extra Functions" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "printyellow (generic function with 1 method)" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using Printf, Dates\n", "\n", "include(\"jlFiles/printmat.jl\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Building a Calendar" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dates and day of the week\n", "2014-01-31 5 \n", "2014-02-28 5 \n", "2014-03-31 1 \n", "2014-04-30 3 \n", "2014-05-31 6 \n", "2014-06-30 1 \n", "2014-07-31 4 \n", "2014-08-31 7 \n", "2014-09-30 2 \n", "2014-10-31 5 \n", "2014-11-30 7 \n", "2014-12-31 3 \n", "\n" ] } ], "source": [ "dNb = Date(2014,1,31):Month(1):Date(2014,12,31) #build a monthly calendar\n", "\n", "println(\"Dates and day of the week\")\n", "printmat([dNb Dates.dayofweek.(dNb)])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Converting from Other Date Formats" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Converting from yyyymmdd\n", "\n", "Background: financial data is often downloaded as CSV files (eg. from finance.yahoo), where the date may look like 20160331. The next cell shows a simple way to create a Julia Date." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2016-03-31\n", "2016-04-01\n", "\n" ] } ], "source": [ "csvDate = [20160331;20160401] #two dates\n", "\n", "jlDate = Date.(string.(csvDate),\"yyyymmdd\") #convert to string and then Julia Date\n", "\n", "printmat(jlDate)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Converting from DateTime (Excel) to Date\n", "\n", "Background: importing xls sheets with ExcelReaders gives DateTime, even if the sheets only contain dates (daily data, say)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "DateTime and then converted to Date:\n", "2016-03-31T00:00:00\n", "2016-04-01T00:00:00\n", "\n", "2016-03-31\n", "2016-04-01\n", "\n" ] } ], "source": [ "xlsDate = [DateTime(2016,3,31);DateTime(2016,4,1)] #to be converted\n", "\n", "jlDate = Date.(xlsDate)\n", "\n", "println(\"\\nDateTime and then converted to Date:\")\n", "printmat(xlsDate)\n", "printmat(jlDate)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Converting from Matlab's datenum to Date\n", "\n", "Background: in Matlab `datenum(2016,3,31)` gives 736420.0. In contrast, in Julia (which follows the ISO 8601 standard), `Dates.value(Date(2016,3,31))` gives 736054, which is 366 less (and it is an integer). A conversion is therefore required." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "matlab datenum and correct Julia Date:\n", " 736420.000 2016-03-31\n", " 736421.000 2016-04-01\n", "\n" ] } ], "source": [ "dNml = [736420.0;736421.0] #to be converted, 2016-03-31;2016-04-01\n", "\n", "jlDate = round.(Int,dNml) .- 366\n", "jlDate = Date.(rata2datetime.(jlDate))\n", "\n", "println(\"\\nmatlab datenum and correct Julia Date:\")\n", "printmat([dNml jlDate],width=12)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# Time Arithmetics\n", "\n", "You can add and subtract Dates from each other." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "difference between two dates: 30 days\n", "as a fraction of the year: 0.082\n" ] } ], "source": [ "d1 = Date(2016,3,31)\n", "d2 = Date(2016,4,30)\n", "\n", "dif = d2 - d1 #count the number of days between d2 and d1\n", "difRel = Dates.value(dif)/daysinyear(d1) #Dates.value() is the datenumber, needs prefix Dates\n", "\n", "println(\"difference between two dates: \",dif)\n", "printlnPs(\"as a fraction of the year: \",difRel)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "d1 and one month later: 2016-03-31 2016-04-30\n" ] } ], "source": [ "d3 = d1 + Month(1) #one month after d1\n", "\n", "println(\"d1 and one month later: \",d1,\" \",d3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Looking up Day of the Week and More" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "day of the week of date: 2016-03-31 4\n", "day of the year of date: 2016-03-31 91\n", "\n", "Splitting up a date: 2016 3 31\n" ] } ], "source": [ "println(\"day of the week of date: \",d1,\" \",dayofweek(d1))\n", "println(\"day of the year of date: \",d1,\" \",dayofyear(d1))\n", "\n", "(y,m,d)= yearmonthday(d1) #splitting up a date\n", "println(\"\\nSplitting up a date: \",y,\" \",m,\" \",d)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Printing a Date\n", "\n", "with your own formatting (see the manual for many other formatting options)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "31 Mar 2016\n", "31-03-2016\n" ] } ], "source": [ "println(Dates.format(d1,\"d u yyyy\")) #needs prefix Dates\n", "println(Dates.format(d1,\"dd-mm-yyyy\"))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "@webio": { "lastCommId": null, "lastKernelId": null }, "anaconda-cloud": {}, "kernelspec": { "display_name": "Julia 1.6.2", "language": "julia", "name": "julia-1.6" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.6.2" } }, "nbformat": 4, "nbformat_minor": 1 }