that conference date and time
TRANSCRIPT
![Page 1: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/1.jpg)
![Page 2: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/2.jpg)
![Page 3: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/3.jpg)
DATE AND TIMEOdds, Ends, and Oddities
![Page 5: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/5.jpg)
https://xkcd.com/1597/
![Page 6: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/6.jpg)
Like Git:• Date and time is complicated• At first, we avoid learning date and time
But also, like Git:• Date and time makes sense• Date and time can be fun
![Page 7: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/7.jpg)
5 O'clock Somewhere
![Page 8: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/8.jpg)
PERSPECTIVEWe all see dates and times from different angles
![Page 9: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/9.jpg)
The Global Timeline
1 2 3 4 5 6 7 8 9
Point in absolute time
![Page 10: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/10.jpg)
Coordinated Universal Time (UTC)• A perspective of the global timeline• Allows us to keep track of absolute time• Primary standard by which the world regulates clocks• Defined precisely by scientific community• Includes leap seconds• Has no relationship to geography• Basically the same as GMT, but GMT is not defined precisely by the
scientific community
![Page 11: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/11.jpg)
Local Time• A local time is a perspective of time• It does not represent a point on the global timeline• It is usually not a contiguous timeline (DST)
![Page 12: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/12.jpg)
UTC Time:2016-04-09T14:17:47ZWhat we know• The point in absolute time• Whether this time is before or
after another point in time
What we don’t know• Whether it is morning or night• What day of the week it is
![Page 13: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/13.jpg)
Local Time:Saturday, April 9, 2016 9:11 AM
We Know• It is Saturday• It is morning
We Don’t Know• What point this is on the
global timeline• Whether it is before or after a
time from a different locality• What the time will be if we
add one hour to this time
![Page 14: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/14.jpg)
TIME ZONESUniting Perspectives
![Page 15: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/15.jpg)
Time Zone Basics• A time zone is a region that observes a uniform standard time• A time zone is defined by a set of offsets from UTC• Offsets are typically in one hour intervals, but not always
• Nepal Standard Time is UTC +5:45• Time zones frequently have multiple offsets• There are two main resources for time zones
• Internet Assigned Numbers Authority (IANA)• Windows Time Zones
• IANA time zones are more widely used, and more accurate
![Page 16: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/16.jpg)
Time Zone: America/Chicago
![Page 17: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/17.jpg)
Politics• Time zones are inherently political• Governments change time zones regularly• Governments change time zones suddenly• Russia this year is an example of politicians causing time chaos
• http://bit.ly/1SB9TvW• Morocco reverts to standard time during Ramadan• Assume nothing
![Page 18: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/18.jpg)
IANA Time Zone Libraries• JavaScript - Moment TimeZone
• http://momentjs.com/timezone/• .NET – NodaTime
• http://nodatime.org/• Java 8 + - java.time (native)
• Java 7 - JodaTime• See Stack Overflow post for more exhaustive list
• http://bit.ly/1RUYuuM
![Page 19: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/19.jpg)
Time Zones are not Offsets!"2016-04-09T19:39:00-05:00“This date could be in:• America/Chicago• America/Bahia_Banderas• America/Bogata• America/Cancun• America/Cayman• And more
![Page 20: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/20.jpg)
ASSUMPTIONSThings we think we know
![Page 21: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/21.jpg)
Assumption“If you just store everything in UTC, all your problems will be solved.”
![Page 22: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/22.jpg)
A Table With Everything in UTC
![Page 23: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/23.jpg)
Show me all the messages for the business day of April 4th.
I have users in London, and across the United States.
In London April 4th is between 2016-04-03 23:00:00Z and 2016-04-04 22:59:59ZIn Minneapolis April 4th is between 2016-04-04 05:00:00Z and 2016-04-05 04:59:59Z
![Page 24: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/24.jpg)
Perspectives• When storing a date, consider the following perspectives
• Absolute time• Time local to the date’s viewer• Time local to the date’s originator
![Page 25: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/25.jpg)
2016-04-09T20:18:48-05:00
ISO 8601 Format with Offset
Local Date Local Time Offset
![Page 26: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/26.jpg)
Why use ISO 8601 format?• With offset, reflects both local and absolute
perspective• Has unambiguous ordering• Compare this to 4/10/2016• In the US this is April 10th
• In the UK this is October 4th • Helps avoid having to compute local perspective from
absolute during querying• Supported by nearly all modern databases• Databases will automatically order in absolute time
![Page 27: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/27.jpg)
Assumption“If I just store everything in ISO 8601
with an offset, everything will be fine.”
![Page 28: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/28.jpg)
Future Dates• Time zones change over time• In the future, the offset of a scheduled time could change• Store future dates in local time with a time zone
![Page 29: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/29.jpg)
Assumption“There are 24 hours in a day, and 365
days in a year.”
![Page 30: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/30.jpg)
moment('2016-03-12 12:00').add(1, 'day').format('LLL')
"March 13, 2016 12:00 PM"
moment('2016-03-12 12:00').add(24,'hour').format('LLL')
"March 13, 2016 1:00 PM"
![Page 31: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/31.jpg)
moment('2016-02-28').add(365, 'days').format('LLL')"February 27, 2017 12:00 AM"
moment('2016-02-28').add(1, 'year').format('LLL')"February 28, 2017 12:00 AM"
![Page 32: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/32.jpg)
As Seen on Stack Overflowvar startHours = 8;var startMinutes = 30;
var ed = new Date();var endHours = ed.getHours();var endMinutes = ed.getMinutes();
var elapsedMinutes = (endHours * 60 + endMinutes) - (startHours * 60 + startMinutes);
console.log(elapsedMinutes);
![Page 33: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/33.jpg)
Assumption“Time and date math work in the
same way.”
![Page 34: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/34.jpg)
moment('2016-01-01').add(1.5, 'hours').format('LLL')"January 1, 2016 1:30 AM“
moment('2016-01-01').add(1.5, 'days').format('LLL')"January 3, 2016 12:00 AM"
![Page 35: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/35.jpg)
Time Math vs Date MathTime math:• Refers to operations involving hours, minutes, seconds, milliseconds• Works by incrementing or decrementing the position on the global timeline by the
number of units in question• Can use fractional units
Date Math:• Refers to all operations larger than hours – days, months, years, quarters, etc.• Works by moving places on the calendar • Cannot be converted to time math• Cannot use fractional units
![Page 36: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/36.jpg)
Assumption“All dates and times exist once in all
time zones”
![Page 37: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/37.jpg)
moment('2016-10-16').format('LLL')
October 16, 2016 1:00 AM
![Page 38: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/38.jpg)
Spring Forward in JavaScript
![Page 39: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/39.jpg)
Fall Back in JavaScript
![Page 40: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/40.jpg)
Samoa• Samoa is very close to the international date line• Samoa found itself trading more frequently with Australia than
America• Samoa switched sides of the international date line• December 30 2011 does not exist in Samoan time
![Page 41: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/41.jpg)
Assumption“The Date object in JavaScript
works.”
![Page 42: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/42.jpg)
var a = new Date('2016-01-01');a.toString();
"Thu Dec 31 2015 18:00:00 GMT-0600 (Central Standard Time)"
var a = new Date('1/1/2016');a.toString();
"Fri Jan 01 2016 00:00:00 GMT-0600 (Central Standard Time)"
![Page 43: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/43.jpg)
Known JavaScript Date Issues• DST Transitions can go both directions• Months index from zero• No support for time zones other than user’s local time zone and
UTC• Older browsers know only current DST rules• Parsing is implementation specific and basically completely broken
• The spec is a disaster
http://codeofmatt.com/2013/06/07/javascript-date-type-is-horribly-broken/
![Page 44: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/44.jpg)
MOMENT.JSQuality Date and Time in Javascript
![Page 45: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/45.jpg)
Parsing• Consistently parses date values according to your expectations• More than 100 languages supported• Thousands of options for parse-able formats• Parse multiple formats if necessary
![Page 46: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/46.jpg)
moment('2016-12-21T13:25:22').format()"2016-12-21T13:25:22-06:00"
moment('30/04/2016', 'DD/MM/YYYY').format()"2016-04-30T00:00:00-05:00"
moment('February 25, 2016', 'MMMM DD, YYYY').format()"2016-02-25T00:00:00-06:00"
moment('octubre 25, 2016', 'MMMM DD, YYYY', 'es').format()"2016-10-25T00:00:00-05:00"
![Page 47: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/47.jpg)
Formatting• Highly configurable format options• Locale based formatting functions
![Page 48: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/48.jpg)
moment().format('MM/DD/YYYY')"04/26/2016"
moment().format('MMMM D, YYYY hh:mm a')"April 26, 2016 09:26 pm"
![Page 49: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/49.jpg)
moment().format('LLL')"April 26, 2016 9:28 PM"
moment().format('L')"04/26/2016"
moment().locale('en-gb').format('L')"26/04/2016"
moment().locale('ar').format('LLL')" أبريل ٢٦ ٢١: ٢٠١٦نيسان ٣١ "
![Page 50: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/50.jpg)
Sane Math• Add and subtract any unit• StartOf/EndOf• Difference
![Page 51: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/51.jpg)
var a = new Date();a.setDate(a.getDate() - 5);
moment().subtract(5, 'days');
![Page 52: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/52.jpg)
var d = new Date();var diff = d.getDate() - d.getDay() + (day == 0 ? -6:1); d.setDate(diff); d.setHours(0,0,0,0);
moment().startOf('week')
![Page 53: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/53.jpg)
var d1 = new Date();var d2 = new Date(01/01/2016);var months;months = (d2.getFullYear() - d1.getFullYear()) * 12;months -= d1.getMonth() + 1;months += d2.getMonth();var diff = months <= 0 ? 0 : months;
moment().diff('2016-01-01', 'months');
![Page 54: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/54.jpg)
Relative Timemoment().subtract(3, 'months').fromNow()"3 months ago"
moment().subtract(2, 'seconds').fromNow()"a few seconds ago"
moment().add(4, 'hours').locale('tlh').fromNow()"loS rep pIq"
Over 100 locales. This is Klingon.
![Page 55: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/55.jpg)
Time Zones (With Moment TimeZone)
moment.tz('2016-04-25T02:30:00Z', 'America/Los_Angeles').format()"2016-04-24T19:30:00-07:00"
moment.tz('2016-04-25T02:30:00Z', 'Europe/Berlin').format()"2016-04-25T04:30:00+02:00"
![Page 56: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/56.jpg)
IN SUMMARYWe all know what happens when you assume
![Page 57: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/57.jpg)
CONSIDER ALL PERSPECTIVES
![Page 58: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/58.jpg)
DISTINGUISH BETWEEN LOCAL AND ABSOLUTE TIME
![Page 59: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/59.jpg)
REMEMBER, TIME ZONES CHANGE RAPIDLY
![Page 60: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/60.jpg)
STORE FUTURE DATES IN LOCAL TIME
![Page 61: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/61.jpg)
DISTINGUISH BETWEEN DATE MATH AND TIME MATH
![Page 62: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/62.jpg)
DON’T TRUST JAVASCRIPT DATE
![Page 63: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/63.jpg)
USE A QUALITY LIBRARY
![Page 64: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/64.jpg)
MAKE NO ASSUMPTIONS
![Page 65: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/65.jpg)
Be like this guy:
![Page 66: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/66.jpg)
Additional Resources• Date and Time Fundamentals – Matt Johnson, Pluralsight
• https://www.pluralsight.com/courses/date-time-fundamentals• Matt Johnson’s Blog
• http://codeofmatt.com/• Lau Taarnskov’s Blog
• http://www.creativedeletion.com/• NodaTime’s Documentation
• http://nodatime.org/• Time Programming Fundamentals – Greg Miller CPPCon 2015
• http://bit.ly/1SgO3E0• Moment.js
• http://momentjs.com/
![Page 67: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/67.jpg)
About Mewww.maggiepint.com
@maggiepint
https://github.com/maggiepint
![Page 68: That Conference Date and Time](https://reader035.vdocuments.site/reader035/viewer/2022070602/58773bbc1a28ab342e8b5a4d/html5/thumbnails/68.jpg)