Question

We've been working on implementing timezone support for our Web app.

This great SO post has helped us a bunch: Daylight saving time and time zone best practices

We've implelmented the OLSON TZ database in MYSQL and are using that for TZ conversions.

We're building a scheduling app so:

We are storing all our bookings which occur on a specific date at a specific time in UTC time in DateTime fields and converting them using CONVERT_TZ(). This is working great.

What we aren't so sure about is stuff like vacations and breaks:

Vacations are just Date references and don't include a time portion. Because CONVERT_TZ() doesn't work on date objects we are guessing that we are best to just store the date value as per the user's timezone?

id1 id3 startDate   endDate
-----------------------------
3   6   2010-12-25  2011-01-03
4   3   2010-09-22  2010-09-26

Same thing with recurring breaks during stored for each day of the week. We currently store their breaks indexed 0-6 for each day of the week. Because these are just time objects we can't use CONVERT_TZ() and assume we should just store them as time values in the user's time zone?

bID sID dayID startTime  endTime
--------------------------------
1   4   1   12:00:00    14:00:00
2   4   4   13:30:00    13:30:00

In this case with vacations and breaks we would only compare them to booking times AFTER the booking times have been converted to the user's local time.

Is this the correct way to handle things, or should we be storing both vacations and breaks in some other way so that we can convert them to UTC (not sure how this would work for breaks).

Thanks for your assistance!

Was it helpful?

Solution

The two storage formats look fine. You just need to convert them to the user's local time when you pull them out of the table.

Actually, for the breaks table I presume they're already nominally in local time, so you just compare directly against the local time of the appointment.

OTHER TIPS

I don't understand your question well enough to say my answer is 100% correct for you. But I think what you need to do is store the DateTime in "local" time and also store the timezone. This way you have it correct even if daylight savings time shifts (which happens).

Good article at http://blogs.windwardreports.com/davidt/2009/11/what-every-developer-should-know-about-time.html (yes by me).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top