{ "metadata": { "language": "Julia", "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "#3. PLEAC Julia: Dates and Times\n", "\n", "[PLEAC = Language Examples Alike Cookbook](http://pleac.sourceforge.net/) by Guillaume Cottenceau et al.\n", "PLEAC examples were drawn from the \"Perl Cookbook\" by Tom Christiansen & Nathan Torkington, published by O'Reilly, and used with the publisher's permission. They provide a nice range of examples oriented toward data munging, the type of work I tend to want to do first when learning a new language.\n", "\n", "The Julia examples below are principally translations from the [Python version](http://pleac.sourceforge.net/pleac_python/)\n", "\n", "###Caution\n", "I'm learning as I go, so the code below probably doesn't represent best practice. Your suggestions are welcome! \n", "Please file an issue or make a pull request to the [github repo](https://github.com/catawbasam/IJulia_PLEAC/).\n", "\n", "The examples are not complete. Missing items are generally noted in comments. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "VERSION" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 1, "text": [ "v\"0.2.0-rc4\"" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "using Datetime\n", "n=now()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 2, "text": [ "2013-11-23T14:27:11 UTC" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Pre-PLEAC: a brief look at Base time functions, Datetime.jl, and Calendar.jl\n", "\n", " Julia includes a small set of c style time functions in its base modules. It addition there are the [Calendar.jl](https://github.com/nolta/Calendar.jl) and [Datetime.jl](https://github.com/karbarcca/Datetime.jl) packages. Many of the examples below use Datetime.jl. Examples related to epoch rely more on the Base time functions. Calendar.jl is also used in some cases; it is currently particularly strong at parsing and formatting (Calendar.jl is also good for internationalized formats, but those are not exercised in this notebook)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "####Base time functions" ] }, { "cell_type": "code", "collapsed": false, "input": [ "t=time() #current time, unix epoch" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ "1.385216831873e9" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "dump(t)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Float64" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 1.385216831873e9\n" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "t2 = ccall(:clock_now, Float64, ()) #Seconds since unix epoch" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "1.385216832207e9" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "t-t2" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "-0.3340001106262207" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### TmStruct is ok per @karbacca (https://github.com/JuliaLang/julia/issues/4739) \n", "time() is local (EDT in my case).\n", "Year field of 113 rather than 2013 reflects base of 1900.\n", "\n", "Month field of 10 rather than 11 reflect zero-based month numbering." ] }, { "cell_type": "code", "collapsed": false, "input": [ "tm=TmStruct(time()) #" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ "TmStruct(12,27,9,23,10,113,6,326,0,0,0,0,0,0)" ] } ], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "tm2 = TmStruct(23,32,10,5,10,113,2,308,0)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": [ "TmStruct(23,32,10,5,10,113,2,308,0,0,0,0,0,0)" ] } ], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "strftime(\"%A\",time()) #correct" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "\"Saturday\"" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "help(TmStruct)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Loading help data..." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Base.TmStruct([seconds])\n", "\n", " Convert a number of seconds since the epoch to broken-down format,\n", " with fields \"sec\", \"min\", \"hour\", \"mday\", \"month\",\n", " \"year\", \"wday\", \"yday\", and \"isdst\".\n" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "dump(tm)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "TmStruct \n", " sec: Int32 12\n", " min: Int32 27\n", " hour: Int32 9\n", " mday: Int32 23\n", " month: Int32 10\n", " year: Int32 113\n", " wday: Int32 6\n", " yday: Int32 326\n", " isdst: Int32 0\n", " _10: Int32 0\n", " _11: Int32 0\n", " _12: Int32 0\n", " _13: Int32 0\n", " _14: Int32 0\n" ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "tns=time_ns() #high precision time" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ "0x0000e883391245e1" ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "strftime(t)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "\"11/23/2013 9:27:11 AM\"" ] } ], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Apparent bug in strptime(), at least on Windows \n", "\n", "The Window C lib doesn't appear to include strptime(), so maybe a Julia version? Python does this in /Lib/_strptime.py" ] }, { "cell_type": "code", "collapsed": false, "input": [ "methods(Base.strptime)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 14, "text": [ "# 2 methods for generic function \"strptime\":\n", "strptime(timestr::Union(ASCIIString,UTF8String)) at libc.jl:48\n", "strptime(fmt::Union(ASCIIString,UTF8String),timestr::Union(ASCIIString,UTF8String)) at libc.jl:50" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "Base.strptime(\"%Y/%m/%d\",\"2013/11/4\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "symbol could not be found strptime (-1): The specified procedure could not be found.\r\n", "\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] }, { "output_type": "stream", "stream": "stderr", "text": [ "WARNING: backtraces on your platform are often misleading or partially incorrect\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] }, { "ename": "LoadError", "evalue": "ccall: could not find function strptime\nat In[15]:1", "output_type": "pyerr", "traceback": [ "ccall: could not find function strptime\nat In[15]:1", " in strptime at libc.jl:51" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "TmStruct(time())" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ "TmStruct(14,27,9,23,10,113,6,326,0,0,0,0,0,0)" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "help(ByteString)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Union(ASCIIString,UTF8String" ] }, { "output_type": "stream", "stream": "stdout", "text": [ ") is of type\n", "DataType : UnionType\n", " supertype: Type{T<:Top}\n", " fields : (:types,)\n" ] } ], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "isa(\"2013/11/4\",ByteString)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 18, "text": [ "true" ] } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Datetime.jl\n", "\n", "Datetime is a package created by @karbarcca. It can be installed via the package manager. You can find source code and documentation at: https://github.com/karbarcca/Datetime.jl." ] }, { "cell_type": "code", "collapsed": false, "input": [ "Datetime.today()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 19, "text": [ "2013-11-23" ] } ], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "Datetime.now()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 20, "text": [ "2013-11-23T14:27:14 UTC" ] } ], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "Datetime.calendar(Datetime.today())" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 21, "text": [ "ISOCalendar" ] } ], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "Datetime.calendar(now())" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 22, "text": [ "ISOCalendar" ] } ], "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ "Datetime.timezone(now())" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 23, "text": [ "Zone0" ] } ], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "Datetime.offset(UTC)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 24, "text": [ "0" ] } ], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "Datetime.today() + Datetime.days(4)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 25, "text": [ "2013-11-27" ] } ], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "Datetime.today() - Datetime.weeks(1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 26, "text": [ "2013-11-16" ] } ], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] }, { "ename": "LoadError", "evalue": "type cannot be constructed\nat In[133]:1", "output_type": "pyerr", "traceback": [ "type cannot be constructed\nat In[133]:1" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 133 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Calendar.jl / ICU.jl" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calendar.jl builds on ICU.jl to provide an internationalized set of dates and times. It knows how to query the computer for local timezone settings and provides parsing and formatting options not currently available with Datetime.jl. It does require ICU binaries, so set-up can be a bit harder than Datetime.jl." ] }, { "cell_type": "code", "collapsed": false, "input": [ "using ICU" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 27 }, { "cell_type": "code", "collapsed": false, "input": [ "ICU.getDefaultTimeZone()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 28, "text": [ "\"America/New_York\"" ] } ], "prompt_number": 28 }, { "cell_type": "code", "collapsed": false, "input": [ "ICU.getNow() #epoch" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 29, "text": [ "1.385216836751e12" ] } ], "prompt_number": 29 }, { "cell_type": "code", "collapsed": false, "input": [ "ICU.ICUCalendar()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 30, "text": [ "ICUCalendar(Ptr{Void} @0x000000000319f1f0)" ] } ], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "using Calendar" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 31 }, { "cell_type": "code", "collapsed": false, "input": [ "t0=Calendar.now()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 32, "text": [ "Nov 23, 2013, 9:27:17 AM EST" ] } ], "prompt_number": 32 }, { "cell_type": "code", "collapsed": false, "input": [ "t = ymd_hms(2013, 3, 10, 1, 59, 59)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 33, "text": [ "Mar 10, 2013, 1:59:59 AM EST" ] } ], "prompt_number": 33 }, { "cell_type": "code", "collapsed": false, "input": [ "typeof(t)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 34, "text": [ "CalendarTime (constructor with 1 method)" ] }, { "output_type": "stream", "stream": "stderr", "text": [ "Warning: using Calendar.now in module Main conflicts with an existing identifier.\n" ] } ], "prompt_number": 34 }, { "cell_type": "code", "collapsed": false, "input": [ "t + days(2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 35, "text": [ "Mar 12, 2013, 2:59:59 AM EDT" ] } ], "prompt_number": 35 }, { "cell_type": "code", "collapsed": false, "input": [ "delta =t0-t" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 36, "text": [ "258 days + 7 hours + 27 minutes + 17.86600000038743 seconds" ] } ], "prompt_number": 36 }, { "cell_type": "code", "collapsed": false, "input": [ "dump(delta)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "FixedCalendarDuration" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " \n", " millis: Float64 2.2318037866e10\n" ] } ], "prompt_number": 37 }, { "cell_type": "code", "collapsed": false, "input": [ "s = Calendar.format(\"yyyy-MMMM-dd EEE HH:mm:ss x\", t)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 38, "text": [ "\"2013-March-10 Sun 01:59:59 -05\"" ] } ], "prompt_number": 38 }, { "cell_type": "code", "collapsed": false, "input": [ " t2 = Calendar.parse(\"yyyy-MMMM-dd EEE HH:mm:ss V\", s)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 39, "text": [ "Mar 10, 2013, 1:59:59 AM EST" ] } ], "prompt_number": 39 }, { "cell_type": "code", "collapsed": false, "input": [ "timezone(t2, \"UTC\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 40, "text": [ "Mar 10, 2013, 6:59:59 AM GMT" ] } ], "prompt_number": 40 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Date to TmStruct" ] }, { "cell_type": "code", "collapsed": false, "input": [ "d = Datetime.today()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 41, "text": [ "2013-11-23" ] } ], "prompt_number": 41 }, { "cell_type": "code", "collapsed": false, "input": [ "tmd = TmStruct(0,0,0,Datetime.day(d), Datetime.month(d)-1,Datetime.year(d)-1900,\n", " Datetime.dayofweek(d), Datetime.dayofyear(d),0)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 42, "text": [ "TmStruct(0,0,0,23,10,113,6,327,0,0,0,0,0,0)" ] } ], "prompt_number": 42 }, { "cell_type": "code", "collapsed": false, "input": [ "#correct\n", "strftime(\"Today is Day %w of the week (a %A). Day %d of the month (%B)\",tmd)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 43, "text": [ "\"Today is Day 6 of the week (a Saturday). Day 23 of the month (November)\"" ] } ], "prompt_number": 43 }, { "cell_type": "code", "collapsed": false, "input": [ "strftime(\"Day %j of the year(%Y), in week %W of the year.\",tmd)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 44, "text": [ "\"Day 328 of the year(2013), in week 47 of the year.\"" ] } ], "prompt_number": 44 }, { "cell_type": "code", "collapsed": false, "input": [ "function Date2TmStruct(d::Datetime.Date)\n", " tmd = TmStruct(0,0,0,Datetime.day(d), Datetime.month(d)-1,Datetime.year(d)-1900,\n", " Datetime.dayofweek(d),Datetime.dayofyear(d),0)\n", " return tmd\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 45, "text": [ "Date2TmStruct (generic function with 1 method)" ] } ], "prompt_number": 45 }, { "cell_type": "code", "collapsed": false, "input": [ "tmd=Date2TmStruct(d)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 46, "text": [ "TmStruct(0,0,0,23,10,113,6,327,0,0,0,0,0,0)" ] } ], "prompt_number": 46 }, { "cell_type": "code", "collapsed": false, "input": [ "dd = date(tmd.year+1900,tmd.month+1,tmd.mday)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 47, "text": [ "2013-11-23" ] } ], "prompt_number": 47 }, { "cell_type": "code", "collapsed": false, "input": [ "function TmStruct2Date(tmd::TmStruct)\n", " return Datetime.date(tmd.year+1900,tmd.month+1,tmd.mday)\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 48, "text": [ "TmStruct2Date (generic function with 1 method)" ] } ], "prompt_number": 48 }, { "cell_type": "code", "collapsed": false, "input": [ "TmStruct2Date(tmd)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 49, "text": [ "2013-11-23" ] } ], "prompt_number": 49 }, { "cell_type": "code", "collapsed": false, "input": [ "import Base.strftime\n", "function strftime(fmt::String, d::Datetime.Date)\n", " \"\"\"strftime date formatting using Datetime.Date\"\"\"\n", " tmd = Date2TmStruct(d)\n", " return strftime(fmt, tmd)\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 50, "text": [ "strftime (generic function with 4 methods)" ] } ], "prompt_number": 50 }, { "cell_type": "code", "collapsed": false, "input": [ "strftime(\"%A\",Datetime.today())" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 52, "text": [ "\"Saturday\"" ] } ], "prompt_number": 52 }, { "cell_type": "code", "collapsed": false, "input": [ "strftime(\"%Y-%m-%d\", now())" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 134, "text": [ "\"2013-11-23\"" ] } ], "prompt_number": 134 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###Datetime to TmStruct" ] }, { "cell_type": "code", "collapsed": false, "input": [ "dt=now()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 135, "text": [ "2013-11-25T18:32:33 UTC" ] } ], "prompt_number": 135 }, { "cell_type": "code", "collapsed": false, "input": [ "#Year field of 113 rather than 2013 reflects base of 1900.\n", "#Month field of 10 rather than 11 reflect zero-based month numbering.\n", "tm = TmStruct(23,32,10,5,10,113,2,308,0)\n", "dump(tm)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "TmStruct" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " \n", " sec: Int32 23\n", " min: Int32 32\n", " hour: Int32 10\n", " mday: Int32 5\n", " month: Int32 10\n", " year: Int32 113\n", " wday: Int32 2\n", " yday: Int32 308\n", " isdst: Int32 0\n", " _10: Int32 0\n", " _11: Int32 0\n", " _12: Int32 0\n", " _13: Int32 0\n", " _14: Int32 0\n" ] } ], "prompt_number": 136 }, { "cell_type": "code", "collapsed": false, "input": [ "Datetime.second(dt), Datetime.minute(dt), Datetime.hour(dt), \n", "Datetime.day(dt), Datetime.month(dt), Datetime.year(dt), \n", "Datetime.dayofweek(dt), Datetime.dayofyear(dt)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 137, "text": [ "(33,32,18,25,11,2013,1,329)" ] } ], "prompt_number": 137 }, { "cell_type": "markdown", "metadata": {}, "source": [ "? isdst should be 0 or 1. How do we get it from datetime? Maybe we can ignore it for formatting?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "tmdt = TmStruct(Datetime.second(dt), Datetime.minute(dt), Datetime.hour(dt), \n", " Datetime.day(dt), Datetime.month(dt)-1,Datetime.year(dt)-1900,\n", " Datetime.dayofweek(dt)-1,Datetime.dayofyear(dt),0)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 138, "text": [ "TmStruct(33,32,18,25,10,113,0,329,0,0,0,0,0,0)" ] } ], "prompt_number": 138 }, { "cell_type": "code", "collapsed": false, "input": [ "?TmStruct" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Base.TmStruct([seconds])\n", "\n", " Convert a number of seconds since the epoch to broken-down format,\n", " with fields \"sec\", \"min\", \"hour\", \"mday\", \"month\",\n", " \"year\", \"wday\", \"yday\", and \"isdst\"." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 206 }, { "cell_type": "code", "collapsed": false, "input": [ "function TmStruct2Datetime(tmd::TmStruct)\n", " return datetime(int64(tmd.year+1900),int64(tmd.month+1),int64(tmd.mday), int64(tmd.hour), int64(tmd.min), int64(tmd.sec) )\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 195, "text": [ "TmStruct2Datetime (generic function with 1 method)" ] } ], "prompt_number": 195 }, { "cell_type": "code", "collapsed": false, "input": [ "tmd =TmStruct(time())" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 202, "text": [ "TmStruct(17,49,13,25,10,113,1,328,0,0,0,0,0,0)" ] } ], "prompt_number": 202 }, { "cell_type": "code", "collapsed": false, "input": [ " TmStruct2Datetime(tm)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 203, "text": [ "2013-11-25T13:42:53 UTC" ] } ], "prompt_number": 203 }, { "cell_type": "code", "collapsed": false, "input": [ "#strftime(\"%Y-%m-%d %h:%M:%s\",time())\n", "strftime(\"%Y %H:%M:%S\",time())" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 204, "text": [ "\"2013 13:49:18\"" ] } ], "prompt_number": 204 }, { "cell_type": "code", "collapsed": false, "input": [ "function DateTime2TmStruct(d::Datetime.DateTime)\n", " tmdt = TmStruct(Datetime.second(dt), Datetime.minute(dt), Datetime.hour(dt), \n", " Datetime.day(dt), Datetime.month(dt)-1,Datetime.year(dt)-1900,\n", " Datetime.dayofweek(dt),Datetime.dayofyear(dt),0)\n", " return tmdt\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 57, "text": [ "DateTime2TmStruct (generic function with 1 method)" ] } ], "prompt_number": 57 }, { "cell_type": "code", "collapsed": false, "input": [ "function strftime(fmt::String, dt::Datetime.DateTime)\n", " \"\"\"strftime date formatting using Datetime.DateTime\"\"\"\n", " tmdt = DateTime2TmStruct(dt)\n", " return strftime(fmt, tmdt)\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 58, "text": [ "strftime (generic function with 6 methods)" ] } ], "prompt_number": 58 }, { "cell_type": "code", "collapsed": false, "input": [ "strftime(\"%A\",dt)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 59, "text": [ "\"Saturday\"" ] } ], "prompt_number": 59 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 3.0: Introduction" ] }, { "cell_type": "code", "collapsed": false, "input": [ "using Datetime" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 60 }, { "cell_type": "code", "collapsed": false, "input": [ "dayofyear(today())" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 61, "text": [ "327" ] } ], "prompt_number": 61 }, { "cell_type": "code", "collapsed": false, "input": [ "println(\"Today is day $(dayofyear(today())) of the current year.\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Today is day 327 of the current year." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 62 }, { "cell_type": "code", "collapsed": false, "input": [ "println(\"Today is day $(dayofyear(today())) of $(year(today())).\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Today is day 327 of 2013." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 63 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 3.1: Finding Today's Date" ] }, { "cell_type": "code", "collapsed": false, "input": [ "println(\"The date is $(today()).\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "The date is Nov 23, 2013, 12:00:00 AM EST." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 64 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 3.2: Converting DMYHMS to epoch seconds" ] }, { "cell_type": "code", "collapsed": false, "input": [ "now()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 65, "text": [ "2013-11-23T14:27:26 UTC" ] } ], "prompt_number": 65 }, { "cell_type": "code", "collapsed": false, "input": [ "epoch_dt = datetime(1970,1,1,0,0,0)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 66, "text": [ "1970-01-01T00:00:00 UTC" ] } ], "prompt_number": 66 }, { "cell_type": "code", "collapsed": false, "input": [ "now() - epoch_dt" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 67, "text": [ "1385216871852" ] } ], "prompt_number": 67 }, { "cell_type": "code", "collapsed": false, "input": [ "function datetime2unix(dt::DateTime)\n", " #returns difference in seconds, to match Base.time()\n", " #unix2datetime{T<:Offsets}(x::Int64,tz::Type{T}) = convert(DateTime{CALENDAR,tz},UNIXEPOCH + x + leaps(UNIXEPOCH + x))\n", " epoch_dt = datetime(1970,1,1,0,0,0)\n", " diff_secs = (dt - epoch_dt - Datetime.leaps(dt))/1000\n", " return diff_secs \n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 68, "text": [ "datetime2unix (generic function with 1 method)" ] } ], "prompt_number": 68 }, { "cell_type": "code", "collapsed": false, "input": [ "dt=now()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 69, "text": [ "2013-11-23T14:27:27 UTC" ] } ], "prompt_number": 69 }, { "cell_type": "code", "collapsed": false, "input": [ "ep=datetime2unix(dt)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 70, "text": [ "1.385216847391e9" ] } ], "prompt_number": 70 }, { "cell_type": "code", "collapsed": false, "input": [ "(time() - datetime2unix(now())) #seconds difference" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 71, "text": [ "0.0" ] } ], "prompt_number": 71 }, { "cell_type": "code", "collapsed": false, "input": [ "(time() - datetime2unix(now(UTC))) " ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 72, "text": [ "-0.003999948501586914" ] } ], "prompt_number": 72 }, { "cell_type": "code", "collapsed": false, "input": [ "(time() - datetime2unix(now(EDT))) " ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 73, "text": [ "-0.006000041961669922" ] } ], "prompt_number": 73 }, { "cell_type": "code", "collapsed": false, "input": [ "println(\"Epoch seconds: $(time())\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Epoch seconds: 1.385216848683e9" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 74 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 3.3: Converting epoch seconds to DMYHMS" ] }, { "cell_type": "code", "collapsed": false, "input": [ "t= time()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 75, "text": [ "1.385216848954e9" ] } ], "prompt_number": 75 }, { "cell_type": "code", "collapsed": false, "input": [ "#correct utc\n", "unix2datetime( int64(t*1000) , UTC)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 76, "text": [ "2013-11-23T14:27:28 UTC" ] } ], "prompt_number": 76 }, { "cell_type": "code", "collapsed": false, "input": [ "#correct local\n", "unix2datetime( int64(t*1000) , EDT)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 77, "text": [ "2013-11-23T09:27:28 EST" ] } ], "prompt_number": 77 }, { "cell_type": "code", "collapsed": false, "input": [ "function time2datetime(t::Float64, timezone)\n", " \"\"\"time() style epoch to Datetime in specified timezone.\"\"\"\n", " return unix2datetime( int64(t*1000) , timezone) \n", "end\n", "\n", "time2datetime_utc(t::Float64) = time2datetime(t::Float64, UTC) \n", "time2datetime_est(t::Float64) = time2datetime(t::Float64, EDT) " ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 78, "text": [ "time2datetime_est (generic function with 1 method)" ] } ], "prompt_number": 78 }, { "cell_type": "code", "collapsed": false, "input": [ "# correct\n", "time2datetime_est(t)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 79, "text": [ "2013-11-23T09:27:28 EST" ] } ], "prompt_number": 79 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 3.4: Adding to or subtracting from a date" ] }, { "cell_type": "code", "collapsed": false, "input": [ "mydate = date(2013,1,2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 80, "text": [ "2013-01-02" ] } ], "prompt_number": 80 }, { "cell_type": "code", "collapsed": false, "input": [ "println(\"One day in the future is $(mydate + day(1))\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] }, { "ename": "LoadError", "evalue": "no method day(Int64,)\nat In[81]:1", "output_type": "pyerr", "traceback": [ "no method day(Int64,)\nat In[81]:1" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 81 }, { "cell_type": "code", "collapsed": false, "input": [ "println(\"Two weeks in the past is $(mydate + week(-2))\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] }, { "ename": "LoadError", "evalue": "no method week(Int64,)\nat In[82]:1", "output_type": "pyerr", "traceback": [ "no method week(Int64,)\nat In[82]:1" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 82 }, { "cell_type": "code", "collapsed": false, "input": [ "dt2 = date(2013,2,14)\n", "dt2 - mydate" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 83, "text": [ "43" ] } ], "prompt_number": 83 }, { "cell_type": "code", "collapsed": false, "input": [ "birthtime = datetime(1973,1,18,3,45,50)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 84, "text": [ "1973-01-18T03:45:50 UTC" ] } ], "prompt_number": 84 }, { "cell_type": "code", "collapsed": false, "input": [ "then = birthtime + seconds(5)+minutes(17)+hours(2)+days(55)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] }, { "ename": "LoadError", "evalue": "no method +(DateTime{ISOCalendar,Zone0},FixedCalendarDuration)\nat In[85]:1", "output_type": "pyerr", "traceback": [ "no method +(DateTime{ISOCalendar,Zone0},FixedCalendarDuration)\nat In[85]:1", " in + at operators.jl:68" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 85 }, { "cell_type": "code", "collapsed": false, "input": [ "println(\"Then is $then\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] }, { "ename": "LoadError", "evalue": "then not defined\nat In[86]:1", "output_type": "pyerr", "traceback": [ "then not defined\nat In[86]:1" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 86 }, { "cell_type": "code", "collapsed": false, "input": [ "when = date(1973,1,18) + days(55)\n", "println(\"Nat was 55 days old on $when\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] }, { "ename": "LoadError", "evalue": "no method +(Date{ISOCalendar},FixedCalendarDuration)\nat In[87]:1", "output_type": "pyerr", "traceback": [ "no method +(Date{ISOCalendar},FixedCalendarDuration)\nat In[87]:1" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 87 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 3.5: Difference of two dates" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Using Datetime.jl\n", "Date differences are given in days as a Day " ] }, { "cell_type": "code", "collapsed": false, "input": [ "diff = dt2 - mydate" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 88, "text": [ "43" ] } ], "prompt_number": 88 }, { "cell_type": "code", "collapsed": false, "input": [ "dump(diff)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Day" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "{ISOCalendar} 43 days\n" ] } ], "prompt_number": 89 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Datetime differences are given in milliseconds as an Int64" ] }, { "cell_type": "code", "collapsed": false, "input": [ "dt1 = now()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 90, "text": [ "2013-11-23T14:27:44 UTC" ] } ], "prompt_number": 90 }, { "cell_type": "code", "collapsed": false, "input": [ "dt2 = now()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 91, "text": [ "2013-11-23T14:27:44 UTC" ] } ], "prompt_number": 91 }, { "cell_type": "code", "collapsed": false, "input": [ "diff_dt = dt2-dt1" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 92, "text": [ "1" ] } ], "prompt_number": 92 }, { "cell_type": "code", "collapsed": false, "input": [ "dump(diff_dt)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Int64" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " 1\n" ] } ], "prompt_number": 93 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####Something like partition_period(date, (date parts,)) partition_period(datetime,(datetime parts,)) might be handy" ] }, { "cell_type": "code", "collapsed": false, "input": [ "bree = datetime(1981,6,16,4,35,25)\n", "nat = datetime(1973,1,18,3,45,50)\n", "dseconds = (bree-nat)/1000\n", "float_days = dseconds/(60*60*24)\n", "ddays = int(float_days) #convert from milliseconds to days" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 94, "text": [ "3071" ] } ], "prompt_number": 94 }, { "cell_type": "code", "collapsed": false, "input": [ "println(\"There were $(int(ddays)) days between Nat and Bree\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "There were 3071 days between Nat and Bree\n" ] } ], "prompt_number": 95 }, { "cell_type": "code", "collapsed": false, "input": [ "dweeks = div(ddays,7)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 96, "text": [ "438" ] } ], "prompt_number": 96 }, { "cell_type": "code", "collapsed": false, "input": [ "xdays = ddays % 7" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 97, "text": [ "5" ] } ], "prompt_number": 97 }, { "cell_type": "code", "collapsed": false, "input": [ "day_fraction = float_days - ddays" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 98, "text": [ "0.03451388888879592" ] } ], "prompt_number": 98 }, { "cell_type": "code", "collapsed": false, "input": [ "xhours = int(floor(24*day_fraction,0))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 99, "text": [ "0" ] } ], "prompt_number": 99 }, { "cell_type": "code", "collapsed": false, "input": [ "dminutes = int(dseconds/60)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 100, "text": [ "4422290" ] } ], "prompt_number": 100 }, { "cell_type": "code", "collapsed": false, "input": [ "day_seconds = dseconds-(ddays*24*60*60)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 101, "text": [ "2982.0" ] } ], "prompt_number": 101 }, { "cell_type": "code", "collapsed": false, "input": [ "xhours= int(div(day_seconds, 60*60))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 102, "text": [ "0" ] } ], "prompt_number": 102 }, { "cell_type": "code", "collapsed": false, "input": [ "xminutes = int(div(day_seconds, 60))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 103, "text": [ "49" ] } ], "prompt_number": 103 }, { "cell_type": "code", "collapsed": false, "input": [ "xseconds = int(day_seconds % 60)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 104, "text": [ "42" ] } ], "prompt_number": 104 }, { "cell_type": "code", "collapsed": false, "input": [ "#check the sum\n", "xseconds + 60*xminutes + 60*60*xhours" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 105, "text": [ "2982" ] } ], "prompt_number": 105 }, { "cell_type": "code", "collapsed": false, "input": [ "println(\"$weeks weeks, $xdays days, $xhours:$xminutes:$xseconds\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "weeks weeks, 5 days, 0:49:42" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 106 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####using Calendar.jl" ] }, { "cell_type": "code", "collapsed": false, "input": [ "bree = ymd_hms(1981,6,16,4,35,25)\n", "nat = ymd_hms(1973,1,18,3,45,50)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 107, "text": [ "Jan 18, 1973, 3:45:50 AM EST" ] } ], "prompt_number": 107 }, { "cell_type": "code", "collapsed": false, "input": [ "delta=bree-nat" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 108, "text": [ "3070 days + 23 hours + 49 minutes + 35 seconds" ] } ], "prompt_number": 108 }, { "cell_type": "markdown", "metadata": {}, "source": [ "delta is in milliseconds, just like Datetime.jl, so the rest is unchanged from above" ] }, { "cell_type": "code", "collapsed": false, "input": [ "dump(delta)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "FixedCalendarDuration \n", " millis: Float64 2.65333775e11\n" ] } ], "prompt_number": 109 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 3.6: Day in a Week/Month/Year or Week Number" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "using Datetime.jl" ] }, { "cell_type": "code", "collapsed": false, "input": [ "when = Datetime.date(1981,6,16)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 110, "text": [ "1981-06-16" ] } ], "prompt_number": 110 }, { "cell_type": "code", "collapsed": false, "input": [ "Datetime.dayofweek(when) # = Tuesday" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 111, "text": [ "2" ] } ], "prompt_number": 111 }, { "cell_type": "code", "collapsed": false, "input": [ "Datetime.year(when), Datetime.month(when), Datetime.day(when)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 112, "text": [ "(1981,6,16)" ] } ], "prompt_number": 112 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Formatted Datetime and Formatted Date" ] }, { "cell_type": "code", "collapsed": false, "input": [ "strftime(\"%A\",Datetime.today())" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 113, "text": [ "\"Saturday\"" ] } ], "prompt_number": 113 }, { "cell_type": "code", "collapsed": false, "input": [ "strftime(when)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 114, "text": [ "\"6/16/1981 12:00:00 AM\"" ] } ], "prompt_number": 114 }, { "cell_type": "code", "collapsed": false, "input": [ "#this is correct\n", "strftime(\"Today is Day %w of the week (a %A). Day %d of the month (%B)\",Datetime.today())" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 115, "text": [ "\"Today is Day 6 of the week (a Saturday). Day 23 of the month (November)\"" ] } ], "prompt_number": 115 }, { "cell_type": "code", "collapsed": false, "input": [ "strftime(\"1981-06-16 was Day %w of the week (a %A). Day %d of the month (%B)\",when)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 116, "text": [ "\"1981-06-16 was Day 2 of the week (a Tuesday). Day 16 of the month (June)\"" ] } ], "prompt_number": 116 }, { "cell_type": "code", "collapsed": false, "input": [ "strftime(\"Day %j of the year(%Y), in week %W of the year.\",when)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 117, "text": [ "\"Day 168 of the year(1981), in week 24 of the year.\"" ] } ], "prompt_number": 117 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 3.7: Parsing Dates and Times from Strings" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Datetime.jl parsing is a bit limited right now" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# nope\n", "datetime(\"Tue Jun 16 20:18:03 1981\")" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "LoadError", "evalue": "no method datetime(ASCIIString,)\nat In[118]:2", "output_type": "pyerr", "traceback": [ "no method datetime(ASCIIString,)\nat In[118]:2" ] } ], "prompt_number": 118 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####Calendar.jl parsing is stronger" ] }, { "cell_type": "code", "collapsed": false, "input": [ "Calendar.parse(\"EEE MMM DD HH:mm:ss yyyy\", \"Tue Jun 16 20:18:03 1981\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 119, "text": [ "Jan 16, 1981, 8:18:03 PM EST" ] } ], "prompt_number": 119 }, { "cell_type": "code", "collapsed": false, "input": [ "#time.strptime(\"16/6/1981\", \"%d/%m/%Y\")\n", "Calendar.parse(\"DD/M/yyyy\",\"16/6/1981\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 120, "text": [ "Jan 16, 1981, 12:00:00 AM EST" ] } ], "prompt_number": 120 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 3.8: Printing a Date" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "####with Datetime.jl + new strftime()" ] }, { "cell_type": "code", "collapsed": false, "input": [ "dt=Datetime.now()\n", "strftime(\"The date is %A (%a) %d/%m/%Y\",dt) " ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 121, "text": [ "\"The date is Saturday (Sat) 23/11/2013\"" ] } ], "prompt_number": 121 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Calendar.jl doesn't seem to know about string interpolation, so this is a bit clunkier." ] }, { "cell_type": "code", "collapsed": false, "input": [ "cdt = Calendar.now()\n", "Calendar.format(\"The date is yyyy\",cdt)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 122, "text": [ "\"\"" ] } ], "prompt_number": 122 }, { "cell_type": "code", "collapsed": false, "input": [ "\"\"\"The date is $(Calendar.format(\" EEEE (EEE) d/MM/yyyy\",cdt))\"\"\"" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 123, "text": [ "\"The date is Saturday (Sat) 23/11/2013\"" ] } ], "prompt_number": 123 }, { "cell_type": "code", "collapsed": false, "input": [ "Calendar.dayofweek(cdt)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 124, "text": [ "7" ] } ], "prompt_number": 124 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 3.9: High-Resolution Timers" ] }, { "cell_type": "code", "collapsed": false, "input": [ "tic()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 125, "text": [ "0x0000e88a82c18c27" ] } ], "prompt_number": 125 }, { "cell_type": "code", "collapsed": false, "input": [ "elapsed=toc()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "elapsed time: " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "0.014813308 seconds\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 126, "text": [ "0.014813308" ] } ], "prompt_number": 126 }, { "cell_type": "code", "collapsed": false, "input": [ "# from https://github.com/JuliaLang/julia/issues/4478\n", "function f1(n)\n", " sum = 0.0\n", " g1(k) = 1.0/k\n", " for i = 1:n\n", " sum += g1(i) \n", " end\n", " sum\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 127, "text": [ "f1 (generic function with 1 method)" ] } ], "prompt_number": 127 }, { "cell_type": "code", "collapsed": false, "input": [ "f1(99)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 128, "text": [ "5.177377517639621" ] } ], "prompt_number": 128 }, { "cell_type": "code", "collapsed": false, "input": [ "@time f1(1e6)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "elapsed time: " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "0.128212042 seconds (48085868 bytes allocated)\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 129, "text": [ "14.392726722864989" ] } ], "prompt_number": 129 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 3.10: Short Sleeps" ] }, { "cell_type": "code", "collapsed": false, "input": [ "sleep(3.1) #sleep for 4 seconds" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 130 }, { "cell_type": "code", "collapsed": false, "input": [ "@time( sleep(3.1) )" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "elapsed time: " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "3.10030402 seconds (408 bytes allocated)\n" ] } ], "prompt_number": 131 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 3.11: Program hopdelta" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "will not solve" ] }, { "cell_type": "code", "collapsed": false, "input": [ ";ipython nbconvert 3_pleac_datetime.ipynb" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "[NbConvertApp] Using existing profile dir: u'C:\\\\Users\\\\keithc\\\\.ipython\\\\profile_default'\r\n" ] }, { "output_type": "stream", "stream": "stderr", "text": [ "[NbConvertApp] Converting notebook 3_pleac_datetime.ipynb to html\r\n", "[NbConvertApp] Support files will be in 3_pleac_datetime_files\\\r\n" ] }, { "output_type": "stream", "stream": "stderr", "text": [ "[NbConvertApp] Loaded template html_full.tpl\r\n" ] }, { "output_type": "stream", "stream": "stderr", "text": [ "[NbConvertApp] Writing 314208 bytes to 3_pleac_datetime.html\r\n" ] } ], "prompt_number": 132 } ], "metadata": {} } ] }