Problem displaying time zone

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Problem displaying time zone

Ron Olson-2
Hi all-

I assume I'm doing something wrong here, but I've been going through
the docs and haven't come up with a reason why this should be
happening.

Basically, if I create a new DateTime object and pass it a
DateTimeZone instance called from forOffsetHours(), when I try to
print the time using the DateTimeFormatter, I get -06:00 instead of
CST. Below is an example:

import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;

import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class TimeTest
{
        public static void main(String[] args)
        {
                DateTime dt = new DateTime();
                DateTimeFormatter calendarTimeFormat = DateTimeFormat.forPattern("hh:mm a z");
                System.out.println(dt.toString() + " - " + calendarTimeFormat.print(dt));

                Integer timeZoneOffset = -6;

                // And put them together
                DateTime birthDateTime = new DateTime( 2004,
                                                  12,
                                                                                        27,
                                                                                        16,
                                                                                        44,
                                                                                        0,
                                                                                        0,
                                                                                        DateTimeZone.forOffsetHours(timeZoneOffset));

                System.out.println(birthDateTime.toString() + " - " +
calendarTimeFormat.print(birthDateTime));
        }

}

This will print (as of a couple of minutes ago):

2008-11-22T23:06:27.399-06:00 - 11:06 PM CST
2004-12-27T16:44:30.533-06:00 - 04:44 PM -06:00


Might anyone have an idea why this is happening? Any help would be appreciated.

Ron

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Joda-interest mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/joda-interest
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Problem displaying time zone

Brian S O'Neill
Calling forOffsetHours returns a time zone with a fixed offset, as per
the documentation. A fixed offset of 6 hours is not equivalent to CST,
which has DST rules and other historical transitions. There isn't any
API in Joda-Time which returns time zones which match a given offset
because it would return many of them.

Ron Olson wrote:

> Hi all-
>
> I assume I'm doing something wrong here, but I've been going through
> the docs and haven't come up with a reason why this should be
> happening.
>
> Basically, if I create a new DateTime object and pass it a
> DateTimeZone instance called from forOffsetHours(), when I try to
> print the time using the DateTimeFormatter, I get -06:00 instead of
> CST. Below is an example:
>
> import org.joda.time.DateTime;
> import org.joda.time.DateTimeZone;
>
> import org.joda.time.format.DateTimeFormat;
> import org.joda.time.format.DateTimeFormatter;
>
> public class TimeTest
> {
> public static void main(String[] args)
> {
> DateTime dt = new DateTime();
> DateTimeFormatter calendarTimeFormat = DateTimeFormat.forPattern("hh:mm a z");
> System.out.println(dt.toString() + " - " + calendarTimeFormat.print(dt));
>
> Integer timeZoneOffset = -6;
>
> // And put them together
> DateTime birthDateTime = new DateTime( 2004,
>                                 12,
> 27,
> 16,
> 44,
> 0,
> 0,
> DateTimeZone.forOffsetHours(timeZoneOffset));
>
> System.out.println(birthDateTime.toString() + " - " +
> calendarTimeFormat.print(birthDateTime));
> }
>
> }
>
> This will print (as of a couple of minutes ago):
>
> 2008-11-22T23:06:27.399-06:00 - 11:06 PM CST
> 2004-12-27T16:44:30.533-06:00 - 04:44 PM -06:00
>
>
> Might anyone have an idea why this is happening? Any help would be appreciated.
>
> Ron
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win great prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________
> Joda-interest mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/joda-interest
>
>  

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Joda-interest mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/joda-interest
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Problem displaying time zone

Ron Olson-2
Ah, okay, this is where my understanding of time and time zones fell
apart; I didn't realize that a fixed offset would not equal a named
time zone. Thinking about the larger world, it makes sense; -6 is not
just US Central Time; sorry about that. :)

So if I may, what would be a best-practice for dealing with time
zones, DST, etc. and Joda? Can Joda figure out whether a date/time
falls within DST based on the date & time zone? It seems like there's
enough there that it should be possible, but given my earlier
question, I'm not going to assume anything. :)

My previous experience with time zones was a specialized mail program
in C++ where I had to write it all myself and it was a total
nightmare; calculating the date against the beginning of DST and end
of DST and then, (assuming a US-centric audience, which this program
was), based on the TZ, deciding to apply an offset or not. Total
madness...I was debugging it for a week.

I guess I have a knee-jerk reaction to time zones and DST in that on
one level, it seems pretty straightforward. But on many other levels,
it's just complete madness (to me, anyway).


On 11/23/08, Brian S O'Neill <[hidden email]> wrote:

> Calling forOffsetHours returns a time zone with a fixed offset, as per
>  the documentation. A fixed offset of 6 hours is not equivalent to CST,
>  which has DST rules and other historical transitions. There isn't any
>  API in Joda-Time which returns time zones which match a given offset
>  because it would return many of them.
>
>
>  Ron Olson wrote:
>  > Hi all-
>  >
>  > I assume I'm doing something wrong here, but I've been going through
>  > the docs and haven't come up with a reason why this should be
>  > happening.
>  >
>  > Basically, if I create a new DateTime object and pass it a
>  > DateTimeZone instance called from forOffsetHours(), when I try to
>  > print the time using the DateTimeFormatter, I get -06:00 instead of
>  > CST. Below is an example:
>  >
>  > import org.joda.time.DateTime;
>  > import org.joda.time.DateTimeZone;
>  >
>  > import org.joda.time.format.DateTimeFormat;
>  > import org.joda.time.format.DateTimeFormatter;
>  >
>  > public class TimeTest
>  > {
>  >       public static void main(String[] args)
>  >       {
>  >               DateTime dt = new DateTime();
>  >               DateTimeFormatter calendarTimeFormat = DateTimeFormat.forPattern("hh:mm a z");
>  >               System.out.println(dt.toString() + " - " + calendarTimeFormat.print(dt));
>  >
>  >               Integer timeZoneOffset = -6;
>  >
>  >               // And put them together
>  >               DateTime birthDateTime = new DateTime(  2004,
>  >                                                       12,
>  >                                                                                       27,
>  >                                                                                       16,
>  >                                                                                       44,
>  >                                                                                       0,
>  >                                                                                       0,
>  >                                                                                       DateTimeZone.forOffsetHours(timeZoneOffset));
>  >
>  >               System.out.println(birthDateTime.toString() + " - " +
>  > calendarTimeFormat.print(birthDateTime));
>  >       }
>  >
>  > }
>  >
>  > This will print (as of a couple of minutes ago):
>  >
>  > 2008-11-22T23:06:27.399-06:00 - 11:06 PM CST
>  > 2004-12-27T16:44:30.533-06:00 - 04:44 PM -06:00
>  >
>  >
>  > Might anyone have an idea why this is happening? Any help would be appreciated.
>  >
>  > Ron
>  >
>
> > -------------------------------------------------------------------------
>  > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
>  > Build the coolest Linux based applications with Moblin SDK & win great prizes
>  > Grand prize is a trip for two to an Open Source event anywhere in the world
>  > http://moblin-contest.org/redirect.php?banner_id=100&url=/
>  > _______________________________________________
>  > Joda-interest mailing list
>  > [hidden email]
>  > https://lists.sourceforge.net/lists/listinfo/joda-interest
>  >
>  >
>
>  -------------------------------------------------------------------------
>  This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
>  Build the coolest Linux based applications with Moblin SDK & win great prizes
>  Grand prize is a trip for two to an Open Source event anywhere in the world
>  http://moblin-contest.org/redirect.php?banner_id=100&url=/
>  _______________________________________________
>  Joda-interest mailing list
>  [hidden email]
>  https://lists.sourceforge.net/lists/listinfo/joda-interest
>

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Joda-interest mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/joda-interest
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Problem displaying time zone

Jim Breen
Joda Time, like Java's Calendar, does manage DST transitions.  If you  
create your DateTimeZone using the appropriate ZoneInfo ID (such as  
"America/Chicago"), then the DateTimeZone will have all the DST rules  
and will reflect them.

DateTimeZone zone = DateTimeZone.forId("America/Chicago");

If you need to know whether a particular DateTime falls within DST for  
a particular time zone, you can use the isStandardOffset() method.

DateTime now = new DateTime();
boolean isInDST = !zone.isStandardOffset(now.getMillis());

Note that you don't need to check for DST to make any adjustments to  
the DateTime.  Joda Time handles that automatically.

On Nov 23, 2008, at 12:48 AM, Ron Olson wrote:

> Ah, okay, this is where my understanding of time and time zones fell
> apart; I didn't realize that a fixed offset would not equal a named
> time zone. Thinking about the larger world, it makes sense; -6 is not
> just US Central Time; sorry about that. :)
>
> So if I may, what would be a best-practice for dealing with time
> zones, DST, etc. and Joda? Can Joda figure out whether a date/time
> falls within DST based on the date & time zone? It seems like there's
> enough there that it should be possible, but given my earlier
> question, I'm not going to assume anything. :)
>
> My previous experience with time zones was a specialized mail program
> in C++ where I had to write it all myself and it was a total
> nightmare; calculating the date against the beginning of DST and end
> of DST and then, (assuming a US-centric audience, which this program
> was), based on the TZ, deciding to apply an offset or not. Total
> madness...I was debugging it for a week.
>
> I guess I have a knee-jerk reaction to time zones and DST in that on
> one level, it seems pretty straightforward. But on many other levels,
> it's just complete madness (to me, anyway).
>
>
> On 11/23/08, Brian S O'Neill <[hidden email]> wrote:
>> Calling forOffsetHours returns a time zone with a fixed offset, as  
>> per
>> the documentation. A fixed offset of 6 hours is not equivalent to  
>> CST,
>> which has DST rules and other historical transitions. There isn't any
>> API in Joda-Time which returns time zones which match a given offset
>> because it would return many of them.
>>
>>
>> Ron Olson wrote:
>>> Hi all-
>>>
>>> I assume I'm doing something wrong here, but I've been going through
>>> the docs and haven't come up with a reason why this should be
>>> happening.
>>>
>>> Basically, if I create a new DateTime object and pass it a
>>> DateTimeZone instance called from forOffsetHours(), when I try to
>>> print the time using the DateTimeFormatter, I get -06:00 instead of
>>> CST. Below is an example:
>>>
>>> import org.joda.time.DateTime;
>>> import org.joda.time.DateTimeZone;
>>>
>>> import org.joda.time.format.DateTimeFormat;
>>> import org.joda.time.format.DateTimeFormatter;
>>>
>>> public class TimeTest
>>> {
>>>      public static void main(String[] args)
>>>      {
>>>              DateTime dt = new DateTime();
>>>              DateTimeFormatter calendarTimeFormat =  
>>> DateTimeFormat.forPattern("hh:mm a z");
>>>              System.out.println(dt.toString() + " - " +  
>>> calendarTimeFormat.print(dt));
>>>
>>>              Integer timeZoneOffset = -6;
>>>
>>>              // And put them together
>>>              DateTime birthDateTime = new DateTime(  2004,
>>>                                                      12,
>>>                                                                                      27
>>> ,
>>>                                                                                      16
>>> ,
>>>                                                                                      44
>>> ,
>>>                                                                                      0
>>> ,
>>>                                                                                      0
>>> ,
>>>                                                                                      DateTimeZone
>>> .forOffsetHours(timeZoneOffset));
>>>
>>>              System.out.println(birthDateTime.toString() + " - " +
>>> calendarTimeFormat.print(birthDateTime));
>>>      }
>>>
>>> }
>>>
>>> This will print (as of a couple of minutes ago):
>>>
>>> 2008-11-22T23:06:27.399-06:00 - 11:06 PM CST
>>> 2004-12-27T16:44:30.533-06:00 - 04:44 PM -06:00
>>>
>>>
>>> Might anyone have an idea why this is happening? Any help would be  
>>> appreciated.
>>>
>>> Ron
>>>
>>
>>> -------------------------------------------------------------------------
>>> This SF.Net email is sponsored by the Moblin Your Move Developer's  
>>> challenge
>>> Build the coolest Linux based applications with Moblin SDK & win  
>>> great prizes
>>> Grand prize is a trip for two to an Open Source event anywhere in  
>>> the world
>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/
>>> _______________________________________________
>>> Joda-interest mailing list
>>> [hidden email]
>>> https://lists.sourceforge.net/lists/listinfo/joda-interest
>>>
>>>
>>
>> -------------------------------------------------------------------------
>> This SF.Net email is sponsored by the Moblin Your Move Developer's  
>> challenge
>> Build the coolest Linux based applications with Moblin SDK & win  
>> great prizes
>> Grand prize is a trip for two to an Open Source event anywhere in  
>> the world
>> http://moblin-contest.org/redirect.php?banner_id=100&url=/
>> _______________________________________________
>> Joda-interest mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/joda-interest
>>
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's  
> challenge
> Build the coolest Linux based applications with Moblin SDK & win  
> great prizes
> Grand prize is a trip for two to an Open Source event anywhere in  
> the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________
> Joda-interest mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/joda-interest


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Joda-interest mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/joda-interest
Loading...