I suspect that your use case is a little specific for Joda-Time, but hopefully the convertUTCToLocal() and similar methods will help you write the custom code.
The iTimeField code below is an optimisation. If the field is smaller than a day, then there is no need to take time-zones into account in the same way. (Rounding to the nearest minute is only ever a small change) Stephen On 30 December 2011 12:52, Shay Banon <kim...@gmail.com> wrote: > First, thanks for sticking with me :). I think I might need to go down the > custom code route, wanted to verify if my logic is sound. Rounding based on > zone is done in ZoneChrono, basically, this: > > if (iTimeField) { > int offset = getOffsetToAdd(instant); > instant = iField.roundFloor(instant + offset); > return instant - offset; > } else { > long localInstant = iZone.convertUTCToLocal(instant); > localInstant = iField.roundFloor(localInstant); > return iZone.convertLocalToUTC(localInstant, false, > instant); > } > > But, this does not work well in my case. If its iTimeFIeld, then it will > return the UTC millis, but if not, then there is no need to > convertLocalToUTC, since its already in UTC millis because of the "bigger" > rounding. Is that correct? > > On Fri, Dec 30, 2011 at 1:13 AM, Stephen Colebourne <scolebou...@joda.org> > wrote: >> >> Perhaps DateTimeZone.convertUTCToLocal(utcMillis) might be the method you >> want? >> >> Or, MutableDateTime.setZoneRetainMillis(UTC) ? >> >> both will effectively get the "local millis". >> >> Stephen >> >> On 29 December 2011 18:23, Shay Banon <kim...@gmail.com> wrote: >> > Right, I saw that toString handles it nicely, but I still need the >> > millis. >> > Its basically an API that returns bucketed results with counts, and the >> > bucket value is millis for simplicity (so the user won't need to parse a >> > formatted string). Is there a way to get the "correct" millis? >> > >> > >> > On Thu, Dec 29, 2011 at 7:48 PM, Stephen Colebourne >> > <scolebou...@joda.org> >> > wrote: >> >> >> >> Internally, J-T calculates using "local millis" which is a count based >> >> on epoch millis with the offset removed. This is in effect identical >> >> to UTC. >> >> >> >> After you setMillis(0), you can do a toString(), and you will see the >> >> time is 01:00. When this is rounded to the nearest day you get a time >> >> of 00:00 (which happens to be -3600000 in UTC millis). >> >> >> >> But rounding a time of 01:00 to the nearest minute will not change >> >> anything, and gives 01:00. >> >> >> >> The problem is that you are focussing on getting the millis, rather >> >> than on the toString() value, which is correct. >> >> >> >> Stephen >> >> >> >> >> >> On 29 December 2011 17:02, Shay Banon <kim...@gmail.com> wrote: >> >> > Grr, I started to try and build something that would do the rounding >> >> > I >> >> > need, >> >> > but I feel like I might be missing something in Joda that will help >> >> > me >> >> > and >> >> > not cause me to write all this code. >> >> > >> >> > Recap of what I am trying to do: Have a list of UTC millis, and want >> >> > to >> >> > bucket them based on rounding and time zone. The buckets can be >> >> > either >> >> > UTC >> >> > millis rounded, or time zone offset, I don't mind, but obviously, >> >> > rounding >> >> > should take timezone into account. >> >> > >> >> > Going back to my first sample, when I use dayOfMonth: >> >> > >> >> > MutableDateTime time = new MutableDateTime(DateTimeZone.UTC); >> >> > time.setZone(DateTimeZone.forOffsetHours(1)); >> >> > time.setRounding(time.getChronology().dayOfMonth(), >> >> > MutableDateTime.ROUND_FLOOR); >> >> > time.setMillis(0); >> >> > time.getMilli(); >> >> > >> >> > I get back -3600000, which is basically 1 hour before 0. What happens >> >> > is >> >> > that the millis are offseted by the time zone, then floored by day, >> >> > and >> >> > then the timezone is applied again. The result is not UTC. >> >> > >> >> > On the other hand, when I use minutOfHour instead of day, I get back >> >> > 0, >> >> > which is UTC. >> >> > >> >> > I need something that is consistent regardless of the rounding >> >> > applied >> >> > (day, >> >> > minute, hour), is there a way to do it with Joda "easily", or do I >> >> > need >> >> > to >> >> > write something myself, that does not convert back from local to UTC >> >> > if >> >> > using certain rounding? >> >> > >> >> > >> >> > >> >> > >> >> > On Thu, Dec 29, 2011 at 11:09 AM, Stephen Colebourne >> >> > <scolebou...@joda.org> >> >> > wrote: >> >> >> >> >> >> While I haven't tested it, I'd expect something like that to work >> >> >> (and >> >> >> be reasonably performant). Best advice is to write some decent unit >> >> >> tests and check it that way! >> >> >> Stephen >> >> >> >> >> >> On 28 December 2011 21:42, Shay Banon <kim...@gmail.com> wrote: >> >> >> > Heya, >> >> >> > >> >> >> > Yea, I see the problem with converting back to UTC after the >> >> >> > rounding. >> >> >> > But, if I want to keep it in millis since the epoch offset by time >> >> >> > zone, >> >> >> > will this code work ok?: >> >> >> > >> >> >> > DateTimeZone timeZone = <<some timezone>> >> >> >> > long utcMillis = <<some number>> >> >> >> > >> >> >> > MutableDateTime time = new >> >> >> > MutableDateTime(DateTimeZone.UTC); >> >> >> > time.setRounding(time.getChronology().minuteOfDay(), >> >> >> > MutableDateTime.ROUND_FLOOR); >> >> >> > time.setMillis(utcMillis + timeZone.getOffset(utcMillis)); >> >> >> > long actualValue = time.getMillis(); >> >> >> > >> >> >> > I am still using MutableDateTime with UTC, but passing it the >> >> >> > offset >> >> >> > millis >> >> >> > so it will do the rounding for me. I can work around not even >> >> >> > using >> >> >> > MutableDateTime by using DateTimeField from the chronology >> >> >> > directly >> >> >> > and >> >> >> > calling the correct round method. >> >> >> > >> >> >> > Does that make sense? >> >> >> > >> >> >> > On Wed, Dec 28, 2011 at 1:25 PM, Stephen Colebourne >> >> >> > <scolebou...@joda.org> >> >> >> > wrote: >> >> >> >> >> >> >> >> Well, when you create a MutableDateTime with an offset, then all >> >> >> >> operations on that class have the offset applied. >> >> >> >> >> >> >> >> Rounding to midnight (which is what the dayOfMonth rounding does) >> >> >> >> will >> >> >> >> therefore produce a toString() at midnight. Rounding to nearest >> >> >> >> minute >> >> >> >> will round within the offset/time-zone context, but that makes no >> >> >> >> difference to the result. >> >> >> >> >> >> >> >> If you need greater control than the standard classes are >> >> >> >> providing, >> >> >> >> then you'll need to manage the offset yourself. See the >> >> >> >> DateTimeZone >> >> >> >> class for methods to get the offset. >> >> >> >> >> >> >> >> Stephen >> >> >> >> >> >> >> >> >> >> >> >> On 22 December 2011 23:17, Shay Banon <kim...@gmail.com> wrote: >> >> >> >> > Let me try and explain what I am trying to do, maybe I have >> >> >> >> > gone >> >> >> >> > the >> >> >> >> > wrong >> >> >> >> > way to try and achieve it. Basically, I have a list of utc >> >> >> >> > millis >> >> >> >> > since >> >> >> >> > epoch, and I would like to build a histogram bucking them, but >> >> >> >> > I >> >> >> >> > want >> >> >> >> > it >> >> >> >> > to >> >> >> >> > be built by also taking a custom time zone into account. The >> >> >> >> > return >> >> >> >> > value of >> >> >> >> > each bucket should be skewed by the time zone to be millis >> >> >> >> > since >> >> >> >> > the >> >> >> >> > epoch >> >> >> >> > based on that time zone. >> >> >> >> > >> >> >> >> > I used MutableDateTime, initialized it with the relevant time >> >> >> >> > zone, >> >> >> >> > and >> >> >> >> > then >> >> >> >> > the rounding, and basically setMillis and getMillis for it. It >> >> >> >> > works >> >> >> >> > well >> >> >> >> > with day rounding, but with minute rounding, I still get back >> >> >> >> > the >> >> >> >> > utc >> >> >> >> > millis, and not ones epoch skewed by the time zone. >> >> >> >> > >> >> >> >> > The main reason for returning bucket start time in time zone >> >> >> >> > based >> >> >> >> > millis >> >> >> >> > since epoch is to simplify graphing the results. >> >> >> >> > >> >> >> >> > Does that make sense? Is there a better way to do it? >> >> >> >> > >> >> >> >> > >> >> >> >> > On Fri, Dec 23, 2011 at 12:13 AM, Stephen Colebourne >> >> >> >> > <scolebou...@joda.org> >> >> >> >> > wrote: >> >> >> >> >> >> >> >> >> >> When you choose dayOfMonth, you are asking to round to the >> >> >> >> >> nearest >> >> >> >> >> day, where as with minuteOfHour you are asking to round to the >> >> >> >> >> nearest >> >> >> >> >> minute. The rounding occurs relative to the offset. >> >> >> >> >> >> >> >> >> >> The millis value for the date is simply a reflection of the >> >> >> >> >> offset. >> >> >> >> >> The rounding applies to the local date time, which is why both >> >> >> >> >> the >> >> >> >> >> +01:00 and UTC offsets print a time of midnight. >> >> >> >> >> >> >> >> >> >> Stephen >> >> >> >> >> >> >> >> >> >> On 22 December 2011 21:13, Shay Banon <kim...@gmail.com> >> >> >> >> >> wrote: >> >> >> >> >> > Heya, >> >> >> >> >> > >> >> >> >> >> > I got this strange behavior with rounding and timezone. >> >> >> >> >> > Depending >> >> >> >> >> > on >> >> >> >> >> > the >> >> >> >> >> > type of rounding (dayOfMonth vs. minuteOfHour) I am getting >> >> >> >> >> > different >> >> >> >> >> > results for the same rounded value. The following code runs >> >> >> >> >> > with >> >> >> >> >> > dayOfMonth: >> >> >> >> >> > >> >> >> >> >> > MutableDateTime time = new >> >> >> >> >> > MutableDateTime(DateTimeZone.UTC); >> >> >> >> >> > time.setZone(DateTimeZone.forOffsetHours(1)); >> >> >> >> >> > time.setRounding(time.getChronology().dayOfMonth(), >> >> >> >> >> > MutableDateTime.ROUND_FLOOR); >> >> >> >> >> > >> >> >> >> >> > MutableDateTime utcTime = new >> >> >> >> >> > MutableDateTime(DateTimeZone.UTC); >> >> >> >> >> > >> >> >> >> >> > utcTime.setRounding(utcTime.getChronology().dayOfMonth(), >> >> >> >> >> > MutableDateTime.ROUND_FLOOR); >> >> >> >> >> > >> >> >> >> >> > time.setMillis(0); >> >> >> >> >> > utcTime.setMillis(0); >> >> >> >> >> > System.out.println("time: " + time + ", utc " + >> >> >> >> >> > utcTime); >> >> >> >> >> > System.out.println("time_millis: " + >> >> >> >> >> > time.getMillis() + >> >> >> >> >> > ", >> >> >> >> >> > utc_millis " + utcTime.getMillis()); >> >> >> >> >> > >> >> >> >> >> > And the output shows that the time millis differ between the >> >> >> >> >> > utc >> >> >> >> >> > one, >> >> >> >> >> > and >> >> >> >> >> > the time zone one. On the other hand, just changing to round >> >> >> >> >> > based >> >> >> >> >> > on >> >> >> >> >> > minuteOfHour, results in the millis between the two to be >> >> >> >> >> > the >> >> >> >> >> > same: >> >> >> >> >> > >> >> >> >> >> > MutableDateTime time = new >> >> >> >> >> > MutableDateTime(DateTimeZone.UTC); >> >> >> >> >> > time.setZone(DateTimeZone.forOffsetHours(1)); >> >> >> >> >> > >> >> >> >> >> > time.setRounding(time.getChronology().minuteOfHour(), >> >> >> >> >> > MutableDateTime.ROUND_FLOOR); >> >> >> >> >> > >> >> >> >> >> > MutableDateTime utcTime = new >> >> >> >> >> > MutableDateTime(DateTimeZone.UTC); >> >> >> >> >> > >> >> >> >> >> > utcTime.setRounding(utcTime.getChronology().minuteOfHour(), >> >> >> >> >> > MutableDateTime.ROUND_FLOOR); >> >> >> >> >> > >> >> >> >> >> > time.setMillis(0); >> >> >> >> >> > utcTime.setMillis(0); >> >> >> >> >> > System.out.println("time: " + time + ", utc " + >> >> >> >> >> > utcTime); >> >> >> >> >> > System.out.println("time_millis: " + >> >> >> >> >> > time.getMillis() + >> >> >> >> >> > ", >> >> >> >> >> > utc_millis " + utcTime.getMillis()); >> >> >> >> >> > >> >> >> >> >> > >> >> >> >> >> > I must be missing something obvious, but I don't understand >> >> >> >> >> > why >> >> >> >> >> > the >> >> >> >> >> > results >> >> >> >> >> > would be different between the two runs? The results of the >> >> >> >> >> > two >> >> >> >> >> > runs >> >> >> >> >> > should >> >> >> >> >> > be the same (and I think they all should have 0 as millis, >> >> >> >> >> > no?). >> >> >> >> >> > >> >> >> >> >> > -shay.banon >> >> >> >> >> > >> >> >> >> >> > >> >> >> >> >> > >> >> >> >> >> > >> >> >> >> >> > >> >> >> >> >> > >> >> >> >> >> > ------------------------------------------------------------------------------ >> >> >> >> >> > Write once. Port to many. >> >> >> >> >> > Get the SDK and tools to simplify cross-platform app >> >> >> >> >> > development. >> >> >> >> >> > Create >> >> >> >> >> > new or port existing apps to sell to consumers worldwide. >> >> >> >> >> > Explore >> >> >> >> >> > the >> >> >> >> >> > Intel AppUpSM program developer opportunity. >> >> >> >> >> > appdeveloper.intel.com/join >> >> >> >> >> > http://p.sf.net/sfu/intel-appdev >> >> >> >> >> > _______________________________________________ >> >> >> >> >> > Joda-interest mailing list >> >> >> >> >> > Joda-interest@lists.sourceforge.net >> >> >> >> >> > https://lists.sourceforge.net/lists/listinfo/joda-interest >> >> >> >> >> > >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> ------------------------------------------------------------------------------ >> >> >> >> >> Write once. Port to many. >> >> >> >> >> Get the SDK and tools to simplify cross-platform app >> >> >> >> >> development. >> >> >> >> >> Create >> >> >> >> >> new or port existing apps to sell to consumers worldwide. >> >> >> >> >> Explore >> >> >> >> >> the >> >> >> >> >> Intel AppUpSM program developer opportunity. >> >> >> >> >> appdeveloper.intel.com/join >> >> >> >> >> http://p.sf.net/sfu/intel-appdev >> >> >> >> >> _______________________________________________ >> >> >> >> >> Joda-interest mailing list >> >> >> >> >> Joda-interest@lists.sourceforge.net >> >> >> >> >> https://lists.sourceforge.net/lists/listinfo/joda-interest >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >> > ------------------------------------------------------------------------------ >> >> >> >> > Write once. Port to many. >> >> >> >> > Get the SDK and tools to simplify cross-platform app >> >> >> >> > development. >> >> >> >> > Create >> >> >> >> > new or port existing apps to sell to consumers worldwide. >> >> >> >> > Explore >> >> >> >> > the >> >> >> >> > Intel AppUpSM program developer opportunity. >> >> >> >> > appdeveloper.intel.com/join >> >> >> >> > http://p.sf.net/sfu/intel-appdev >> >> >> >> > _______________________________________________ >> >> >> >> > Joda-interest mailing list >> >> >> >> > Joda-interest@lists.sourceforge.net >> >> >> >> > https://lists.sourceforge.net/lists/listinfo/joda-interest >> >> >> >> > >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> ------------------------------------------------------------------------------ >> >> >> >> Write once. Port to many. >> >> >> >> Get the SDK and tools to simplify cross-platform app development. >> >> >> >> Create >> >> >> >> new or port existing apps to sell to consumers worldwide. Explore >> >> >> >> the >> >> >> >> Intel AppUpSM program developer opportunity. >> >> >> >> appdeveloper.intel.com/join >> >> >> >> http://p.sf.net/sfu/intel-appdev >> >> >> >> _______________________________________________ >> >> >> >> Joda-interest mailing list >> >> >> >> Joda-interest@lists.sourceforge.net >> >> >> >> https://lists.sourceforge.net/lists/listinfo/joda-interest >> >> >> > >> >> >> > >> >> >> > >> >> >> > >> >> >> > >> >> >> > >> >> >> > ------------------------------------------------------------------------------ >> >> >> > Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a >> >> >> > complex >> >> >> > infrastructure or vast IT resources to deliver seamless, secure >> >> >> > access >> >> >> > to >> >> >> > virtual desktops. With this all-in-one solution, easily deploy >> >> >> > virtual >> >> >> > desktops for less than the cost of PCs and save 60% on VDI >> >> >> > infrastructure >> >> >> > costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox >> >> >> > _______________________________________________ >> >> >> > Joda-interest mailing list >> >> >> > Joda-interest@lists.sourceforge.net >> >> >> > https://lists.sourceforge.net/lists/listinfo/joda-interest >> >> >> > >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> ------------------------------------------------------------------------------ >> >> >> Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a >> >> >> complex >> >> >> infrastructure or vast IT resources to deliver seamless, secure >> >> >> access >> >> >> to >> >> >> virtual desktops. With this all-in-one solution, easily deploy >> >> >> virtual >> >> >> desktops for less than the cost of PCs and save 60% on VDI >> >> >> infrastructure >> >> >> costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox >> >> >> _______________________________________________ >> >> >> Joda-interest mailing list >> >> >> Joda-interest@lists.sourceforge.net >> >> >> https://lists.sourceforge.net/lists/listinfo/joda-interest >> >> > >> >> > >> >> > >> >> > >> >> > >> >> > ------------------------------------------------------------------------------ >> >> > Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a >> >> > complex >> >> > infrastructure or vast IT resources to deliver seamless, secure >> >> > access >> >> > to >> >> > virtual desktops. With this all-in-one solution, easily deploy >> >> > virtual >> >> > desktops for less than the cost of PCs and save 60% on VDI >> >> > infrastructure >> >> > costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox >> >> > _______________________________________________ >> >> > Joda-interest mailing list >> >> > Joda-interest@lists.sourceforge.net >> >> > https://lists.sourceforge.net/lists/listinfo/joda-interest >> >> > >> >> >> >> >> >> >> >> ------------------------------------------------------------------------------ >> >> Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a >> >> complex >> >> infrastructure or vast IT resources to deliver seamless, secure access >> >> to >> >> virtual desktops. With this all-in-one solution, easily deploy virtual >> >> desktops for less than the cost of PCs and save 60% on VDI >> >> infrastructure >> >> costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox >> >> _______________________________________________ >> >> Joda-interest mailing list >> >> Joda-interest@lists.sourceforge.net >> >> https://lists.sourceforge.net/lists/listinfo/joda-interest >> > >> > >> > >> > >> > ------------------------------------------------------------------------------ >> > Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a >> > complex >> > infrastructure or vast IT resources to deliver seamless, secure access >> > to >> > virtual desktops. With this all-in-one solution, easily deploy virtual >> > desktops for less than the cost of PCs and save 60% on VDI >> > infrastructure >> > costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox >> > _______________________________________________ >> > Joda-interest mailing list >> > Joda-interest@lists.sourceforge.net >> > https://lists.sourceforge.net/lists/listinfo/joda-interest >> > >> >> >> ------------------------------------------------------------------------------ >> Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex >> infrastructure or vast IT resources to deliver seamless, secure access to >> virtual desktops. With this all-in-one solution, easily deploy virtual >> desktops for less than the cost of PCs and save 60% on VDI infrastructure >> costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox >> _______________________________________________ >> Joda-interest mailing list >> Joda-interest@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/joda-interest > > > > ------------------------------------------------------------------------------ > Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex > infrastructure or vast IT resources to deliver seamless, secure access to > virtual desktops. With this all-in-one solution, easily deploy virtual > desktops for less than the cost of PCs and save 60% on VDI infrastructure > costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox > _______________________________________________ > Joda-interest mailing list > Joda-interest@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/joda-interest > ------------------------------------------------------------------------------ Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex infrastructure or vast IT resources to deliver seamless, secure access to virtual desktops. With this all-in-one solution, easily deploy virtual desktops for less than the cost of PCs and save 60% on VDI infrastructure costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox _______________________________________________ Joda-interest mailing list Joda-interest@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/joda-interest