In Joda-Time, you have to catch the exception, and then use the
low-level utilities in DateTimeZone to find the next transition. That
allows you to adjust the instant to a valid one.

As you might expect, JSR-310 handles this much better.

Stephen


On 15 July 2010 13:27, Marshall Blythe <apuddleof...@hotmail.com> wrote:
> I've never used Joda time before now, but I know of it's reputation
> and it seems like a natural fit for the problem I'm trying to solve.
>
> I'm working on an application that sends notifications to users'
> iPhones. These notifications can be generated at any time of day, and
> I have a requirement to support the concept of a "Do Not Disturb"
> (DND) interval for each user. The reasoning is that some users may
> wish to avoid being bothered with notifications during certain hours
> of the day (such as the overnight hours). If the application needs to
> send a notification to a user it should do so only if the current time
> falls outside of the user's specified DND interval.
>
> I plan on storing the following information in each user's profile:
>
>  - User's time zone
>  - DND begin hour of day  & minute of hour
>  - DND end hour of day  & minute of hour
>
> With this information a user can effectively tell the system, for
> example, "I'm in the US/Pacific time zone, and I do not wish to be
> notified between 00:00 and 06:00". In this case I create the following
> Joda objects using information from the user's profile:
>
>  LocalTime dndBeginTime = new LocalTime(0, 0);
>  LocalTime dndEndTime = new LocalTime(6, 0);
>  DateTimeZone userTimeZone = DateTimeZone.forID("US/
> Pacific");
>
> Now I need to figure out where the current time falls in relation to
> the DND interval specified by the user, so I use this code:
>
>  // First create an Interval with the user's time zone and
>  // bounded by the begin & end times in the user's profile
>  DateTime dndBegin = dndBeginTime.toDateTimeToday(userTimeZone);
>  DateTime dndEnd = dndEndTime.toDateTimeToday(userTimeZone);
>  Interval dndInterval = new Interval(dndBegin, dndEnd);
>
>  if (dndInterval.containsNow()) {
>     // Inside the DND interval- do not send the notification
>  }
>  else {
>     // Outside the DND interval- send the notification
>  }
>
> This code seemed to work well until I hit upon a problem caused by
> Daylight Savings Time. Suppose the user specifies a time that is
> within the 02:00 hour, for example:
>
>  LocalTime dndBeginTime = new LocalTime(2, 30);
>
> In this case my code will fail on the following line during the
> transition from Standard Time to Daylight Savings Time:
>
>  DateTime dndBegin = dndBeginTime.toDateTimeToday(userTimeZone);
>
> I get the following exception (I used DateTimeUtils to set the date
> for testing- great feature BTW):
>
>  org.joda.time.IllegalFieldValueException: Value 2 for hourOfDay is
> not supported:
>  Illegal instant due to time zone offset transition:
> 2010-03-14T02:30:00.000 (America/Los_Angeles)
>
> I understand why this is happening: there is no 02:30 instant on March
> 14, 2010. Time jumps from 01:59 directly to 03:00. However, I'd like
> to deal with this more gracefully. Logically, the user still has a DND
> internal- it's just been shortened by 30 minutes.
>
> Does anyone have any suggestions for dealing with this? I suspect
> there may be a better way somewhere in the API, but I'm not seeing it
> right now.
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Sprint
> What will you do first with EVO, the first 4G phone?
> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
> _______________________________________________
> Joda-interest mailing list
> Joda-interest@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/joda-interest
>
>

------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Joda-interest mailing list
Joda-interest@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/joda-interest

Reply via email to