On 12/10/07, Rob Hills <[EMAIL PROTECTED]> wrote:
>
> Hi Michael,
>
> Michael Horwitz wrote:
> > Whenever I have had to do something like this I resort to using Joda
> > time (http://joda-time.sf.net) in my model classes. Waaaaay easier
> > date/time manipulation, and makes this sort of thing a little easier
> > if you can do it in code. Extra incentive for us is that we use XML in
> > our architectures and Joda time makes the conversion to XML painless.
> I'd looked previously at joda-time and found it interesting, but had
> discarded it as I didn't see a major need for it and have been trying to
> minimise the number of different components in my project.  However,
> this whole date/time business is becoming bigger than Ben Hur ATM :-(
> Part of my problem is that when previously using the java.util.Date
> class for dates and times, I was getting weird timezone-related
> problems.  The app is only ever going to be run in one timezone so I
> didn't expect to have to worry about TZ stuff, but between the server OS
> TZ, the JVM TZ and the Database TZ, I was having all kinds of problems
> with time/date values changing (sometimes several times) between data
> entry, storage and retrieval.  Also, DB queries based on date parameters
> were not working as expected, etc. etc.  I'm developing against
> Postgresql, but the target test and production DB is Oracle (which has
> its own date/time peculiarities) and the spec calls for the app to be DB
> agnostic.
> Since I last emailed on this, I'd decided to store dates and times
> separately, as long values (date in yyyyMMdd format and time in HHmm
> format).  At least it stops the various layers from "helpfully"
> adjusting the times for me.  However, I've not been able to find a way
> to format the output using standard formatting classes based on pattern
> strings from my properties bundle.  I've been trying to use
> java.text.DecimalFormat with a pattern like "00:00" for a time display
> but it seems to interpret the colon as a decimal character, which would
> mean I'd need to store the time as a decimal rather than a long.  I
> could cope with that, but I can see that I won't be able to get
> DecimalFormat to format a yyyyMMdd Long value to look like a date.  It
> looks like my only alternatives are to convert my Long values to
> java.util.Date values (and ? reintroduce TZ issues, as well as
> performance issues converting things back and forth) or else to do my
> own hard-coded formatting and forget about trying to make that
> re-definable via a pattern in the resource bundle.
> So, I'll take a closer look at joda-time to see if that can help me.
> However, I worry that if I return to storing these values in the DB as
> any kind of Date/Time value, I'll get my TZ problems back.
> I'll report back what I discover.


I use Joda-time everywhere at the moment - complete joy after fighting with
java.util.Date and java.util.Calendar - and that includes the places where I
am storing dates/times as integers of the forms you mention above. Joda
time's conversion to/from any format is a doddle - no more messing around
with SimpleDateFormatter. Joda time's timezone manipulations are also a lot
more powerful - the library has a LocalDate, LocalTime and LocalDateTime
classes which represent the date, time and date time minus timezone, which
seems to be exactly what you want?

Mike.

> On Dec 7, 2007 7:06 PM, Rob Hills <[EMAIL PROTECTED]
> > <mailto:[EMAIL PROTECTED]>> wrote:
> >
> >     Michael Horwitz wrote:
> >     > On Dec 7, 2007 5:37 PM, Rob Hills <[EMAIL PROTECTED]
> >     <mailto:[EMAIL PROTECTED]>
> >     > <mailto:[EMAIL PROTECTED]
> >     <mailto:[EMAIL PROTECTED]>>> wrote:
> >     >     This is really a Hibernate column, but hopefully someone
> >     here will
> >     >     know
> >     >     more about it than I do, which wouldn't be hard.
> >     >
> >     >     I have a model class that includes an attribute
> >     "departureTime" of
> >     >     type
> >     >     java.util.Date and the data contains both date and time
> >     >     information.  In
> >     >     my Dao class, I obtain a list of this object using Hibernate
> >     and I
> >     >     need
> >     >     to sort it by the date component of the data (ie excluding
> >     the time).
> >     >
> >     >     I've read the Hibernate documentation on HQL and AFAICT, HQL
> >     supports
> >     >     expressions, but only in the Select part of the HQL.  In the
> >     >     section on
> >     >     "Order By", the documentation says that HQL will order a
> >     list "by any
> >     >     property of a returned class or component".  So, I created an
> >     >     @Transient
> >     >     attribute "departureDate" + getter, that returned just the
> date
> >     >     part of
> >     >     my data (in fact a string formatted to "yyyymmdd"), but that
> >     >     caused an
> >     >     exception to be raised "could not resolve property
> >     departureDate".
> >     >
> >     >
> >     > Perhaps a small ray of light: the bit on Hibernate supporting
> >     > functions in the order by clause is in the next section of the
> >     > document 14.12:
> >     >
> >     > SQL functions and aggregate functions are allowed in the having
> and
> >     > order by clauses, if supported by the underlying database (eg.
> >     not in
> >     > MySQL).
> >     >
> >     > So could be done as long as you are not using MySql?
> >     Well, MySql is one of the databases I'm not using for this project,
> so
> >     that part's OK.  Thanks for pointing out that little bit of the
> docco,
> >     I'd stopped reading at the end of the previous "Order By"
> >     paragraph :-(
> >     Because I'm trying to keep this "generic" HQL, I tried to
> >     incorporate an
> >     earlier section of that document (14.10) on expressions with
> something
> >     else I'd found in my searching that looked promising, the @Formula
> >     annotation.  Unfortunately that hasn't worked.  I tried defining a
> >     "departureDate" in my pojo with the following:
> >
> >     @Formula("year(departureTime) || month(departureTime) ||
> >     day(departureTime)")
> >     public String getDepartureDate() {...
> >
> >     But that gives me an error along the lines of "no such function
> >     year(Timestamp without timezone)".  Having seen some examples of
> >     use of
> >     the Hibernate @Formula annotation, it looks like they want raw SQL
> >     there
> >     rather than HQL.  Unfortunately, it is in handling and formatting of
> >     dates that different databases seem to be most divergent and I need
> to
> >     make this project as DB-agnostic as I can :-(
> >
> >     I may have to create a function to give me a sortable date string
> >     from a
> >     timestamp field.  Now it would be nice if there were some way of
> >     defining that within Hibernate!
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to