Re: [Haskell-cafe] Adding to / subtracting from a LocalTime?
On Sat, Aug 18, 2012 at 8:27 PM, Adde Nilsson wrote: > Hi. > How do you add to or subtract from a LocalTime? > I'm trying to subtract a second from a LocalTime value but the only API's > I can find act only on the TimeOfDay part. > > subSec :: LocalTime -> LocalTime > subSec (LocalTime d t) = LocalTime d $ timeToTimeOfDay ((timeOfDayToTime > t) - (secondsToDiffTime 1)) > > I'm obviously on the wrong track as this looks way too complex for what > it's trying to achieve. > Calling with '2012-08-18 00:00:00' gives '2012-08-18 -01:59:59' which > isn't very helpful. How do I get to '2012-08-17 23:59:59'? > The time-lens [1] package should do what you need. [1]: http://hackage.haskell.org/package/time-lens Roman ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Adding to / subtracting from a LocalTime?
Adde Nilsson wrote: >>> Ok, do you know of any way to add/subtract without converting to UTC and >>> back? Brandon Allbery wrote: >> I'm not sure I'd do that in any environment, since usually libraries don't >> deal with the result crossing a daylight/summer time change (and those that >> do, surprise surprise, normalize to UTC). > Didn't know, thanks. > Back in Haskell land my conclusion is that if you're planning on doing pure > date calculations you have to pass a TimeZone as well. For that to work near clock changes, you need to have the latest summer time/DST policies coded in your app so that you can pass the correct TimeZone. You also need hand-coded logic to handle clock times that occur twice, and clock times that never occur at all, due to changes of clock. An alternative is to use the timezone-series package. Your timezone series knows about the latest clock change policies if you create it from an up-to-date Olson timezone file using the timezone-olson package. http://hackage.haskell.org/package/timezone-series http://hackage.haskell.org/package/timezone-olson Regards, Yitz ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Adding to / subtracting from a LocalTime?
Didn't know, thanks. Back in Haskell land my conclusion is that if you're planning on doing pure date calculations you have to pass a TimeZone as well. /Adde On Sun, Aug 19, 2012 at 12:11 AM, Brandon Allbery wrote: > On Sat, Aug 18, 2012 at 6:05 PM, Adde Nilsson wrote: > >> Ok, do you know of any way to add/subtract without converting to UTC and >> back? > > > I'm not sure I'd do that in any environment, since usually libraries don't > deal with the result crossing a daylight/summer time change (and those that > do, surprise surprise, normalize to UTC). > > -- > brandon s allbery allber...@gmail.com > wandering unix systems administrator (available) (412) 475-9364 vm/sms > > ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Adding to / subtracting from a LocalTime?
On Sat, Aug 18, 2012 at 6:05 PM, Adde Nilsson wrote: > Ok, do you know of any way to add/subtract without converting to UTC and > back? I'm not sure I'd do that in any environment, since usually libraries don't deal with the result crossing a daylight/summer time change (and those that do, surprise surprise, normalize to UTC). -- brandon s allbery allber...@gmail.com wandering unix systems administrator (available) (412) 475-9364 vm/sms ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Adding to / subtracting from a LocalTime?
Ok, do you know of any way to add/subtract without converting to UTC and back? On Sat, Aug 18, 2012 at 7:53 PM, Paolino wrote: > Hello. > > This is a part of a solution, with explicit TimeZone > > Prelude Data.Time> :t \z s t -> utcToLocalTime z $ addUTCTime > (fromIntegral s) (localTimeToUTC z t) > \z s t -> utcToLocalTime z $ addUTCTime (fromIntegral s) (localTimeToUTC z > t) > :: Integral a => TimeZone -> a -> LocalTime -> LocalTime > > where the Integral arguments is in seconds, by docs > > regards > paolino > > > > 2012/8/18 Adde Nilsson > >> Hi. >> How do you add to or subtract from a LocalTime? >> I'm trying to subtract a second from a LocalTime value but the only API's >> I can find act only on the TimeOfDay part. >> >> subSec :: LocalTime -> LocalTime >> subSec (LocalTime d t) = LocalTime d $ timeToTimeOfDay ((timeOfDayToTime >> t) - (secondsToDiffTime 1)) >> >> I'm obviously on the wrong track as this looks way too complex for what >> it's trying to achieve. >> Calling with '2012-08-18 00:00:00' gives '2012-08-18 -01:59:59' which >> isn't very helpful. How do I get to '2012-08-17 23:59:59'? >> >> Thanks, >> Adde >> >> ___ >> Haskell-Cafe mailing list >> Haskell-Cafe@haskell.org >> http://www.haskell.org/mailman/listinfo/haskell-cafe >> >> > ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Adding to / subtracting from a LocalTime?
Hello. This is a part of a solution, with explicit TimeZone Prelude Data.Time> :t \z s t -> utcToLocalTime z $ addUTCTime (fromIntegral s) (localTimeToUTC z t) \z s t -> utcToLocalTime z $ addUTCTime (fromIntegral s) (localTimeToUTC z t) :: Integral a => TimeZone -> a -> LocalTime -> LocalTime where the Integral arguments is in seconds, by docs regards paolino 2012/8/18 Adde Nilsson > Hi. > How do you add to or subtract from a LocalTime? > I'm trying to subtract a second from a LocalTime value but the only API's > I can find act only on the TimeOfDay part. > > subSec :: LocalTime -> LocalTime > subSec (LocalTime d t) = LocalTime d $ timeToTimeOfDay ((timeOfDayToTime > t) - (secondsToDiffTime 1)) > > I'm obviously on the wrong track as this looks way too complex for what > it's trying to achieve. > Calling with '2012-08-18 00:00:00' gives '2012-08-18 -01:59:59' which > isn't very helpful. How do I get to '2012-08-17 23:59:59'? > > Thanks, > Adde > > ___ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > > ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Adding to / subtracting from a LocalTime?
Hi. How do you add to or subtract from a LocalTime? I'm trying to subtract a second from a LocalTime value but the only API's I can find act only on the TimeOfDay part. subSec :: LocalTime -> LocalTime subSec (LocalTime d t) = LocalTime d $ timeToTimeOfDay ((timeOfDayToTime t) - (secondsToDiffTime 1)) I'm obviously on the wrong track as this looks way too complex for what it's trying to achieve. Calling with '2012-08-18 00:00:00' gives '2012-08-18 -01:59:59' which isn't very helpful. How do I get to '2012-08-17 23:59:59'? Thanks, Adde ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe