Hi Hoss,

Thanks for the clarification again.

Now I can see where the problem resides. My client application was
formatting date fields using SimpleDateFormat and as you said, it assumes
host timezone configuration.

: your dateFormat object doesn't know that the 'Z' at the end of the string
you are asking it to parse means it's in UTC

That is indeed truth, I did not realize it. Now I am setting up TimeZone to
UTC and the dates are being shown accordingly.

Michel


On Wed, Oct 28, 2009 at 2:38 AM, Chris Hostetter
<hossman_luc...@fucit.org>wrote:

>
> : I've a wrote a Unit Test in order to simulate the date processing. A high
>
> I think you are missunderstanding what your test is doing, but i'll get to
> that in a second...
>
> : level detail of this problem is that it occurs only when used the JavaBin
> : custom format (&wt=javabin), in this case the dates get back set with
> : environment UTC offset coordinates.
>
> ...if the only time you see a problem is when you use javabin, then a
> testcase demonstrating that (even if it depends on an external Solr port
> being up, ie: the example running on 8983) would be helpful.
>
>        ...but...
>
> i suspect there's a typo in that sentence above, and what you ment to
> write was "dates get SENT BACK with environment UTC offset coordinates"
> ... which strictly speaking isn't possible: An "Date" instance (both
> philosophically, and in the java object sense) has no notion of timezone.
> it is a specific point in the one dimensional space of time, and it's
> only when expressing Dates that they wind up being relative to a refrence
> point (ie: a coordinate system in that 1D space) and the concept of
> timezones gets introduced when using a string based representation.
>
> I believe what you are observing is that the *string* representation of
> the data is formatted in UTC -- which is expected, that is a string
> representation of a Date agnostic of any specific timezone.
>
> As for your test...
>
> The reason the assert fails is because you are building
> your Date object using a SimpleDateFormat object, which by default assumes
> any string it parses is in the TimeZone returned by TimeZene.getDefault()
> (which is host specific)  You can configure it to assume a different
> TimeZone using the setTimeZone method, or by using a pattern that includes
> a TimeZone pattern letter.
>
> In a nutshell: your dateFormat object doesn't know that the 'Z' at the end
> of the string you are asking it to parse means it's in UTC, so it assumes
> you mean 10:10:10 in *your* timzone.  (If you add a
> "System.out.println(originalDateObject)" this should be clear)
> Meanwhile: Solr does recognize that the 'Z' inticates UTC, hence the
> mismatch in Date objects produced.
>
> :         //Given
> :         String originalDateString = "2010-10-10T10:10:10Z";
> :
> :         //When
> :         Field field = new
> : Field("field",originalDateString,Store.NO,Index.ANALYZED);
> :         DateField dateField = new DateField();
> :
> :         SimpleDateFormat dateFormat = new
> : SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
> :         Date originalDateObject = dateFormat.parse(originalDateString);
> :         Date parsedDate = dateField.toObject(field);
> :
> :         //Then
> :         assertEquals(originalDateObject, parsedDate);
>
>
>
> -Hoss
>
>

Reply via email to