• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

Converting from GMT to Local Timezone using two seperate fields (date & time).

 
Greenhorn
Posts: 7
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hello everyone. I've been working on this for a while today and I've hit a wall as to what the issue is.

Basically, I need to convert to a local time from GMT time. I am using a Calendar object, (which will contain the time in GMT format that I need to convert to local time). I am using a date (String) formatted as yyyy-MM-dd that I need to use in the conversion process. I will also have the timezone I need to convert to (IE America/Chicago etc...). I've posted my code below but here is a summary of what I'm trying to do:

I need to convert the time in the Calendar Object to local time using the timezone I have and return a String with the time formated as HHmm. What I've been trying to do is to build a Date object by using SimpleDateFormat.parse() that will contain the date from the string, and the time from the calendar. I will then use SimpleDateFormat to format that date into the proper String with the correct converted local time. However, when I run this, it doesn't seem to convert my time. It looks like it's not using the Timezone I provide it, but keeps it at the default CENTRAL time (my local machine).

I pull the date String and build the SimpleDateFormat object as "yyyy-MM-ddTHHmm". After I build the SimpleDateFormat object, I set it's timezone to something like America/Los_Angeles and I'll put 0900 in my calendar and use 2010-03-05 for the date. I would exepect my 0900 to change to 0700 after my conversion, however it doesn't. It stays at 0900. I hope i've explained everything clearly enough, please let me know if I need to elaborate anymore.



Thank you.

Edited to remove un-necessary parts in code - can add them back if needed.
 
John Foley
Greenhorn
Posts: 7
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I've been playing around with this some more and have more details. I can see where the problem is, but I don't know what is causing it.


Can anyone explain why when I parse the new Date Object below (located in 2nd code structure below on this line

apptDateTime = sdfDateTime.parse(sb.toString());

: , my time changes from 09:01 to 11:01? The conversion to Pacific time looks to be working correctly it's just converting it from 11:01 and not the 09:01.

Here is the code I'm using to build my test case (With notes):



I then pass that calendar to my method which also takes in a date field to perform the logic to convert this to local time (in this example Pacific). Here is the code which does the conversion (with notes and findings):



 
Marshal
Posts: 28177
95
Eclipse IDE Firefox Browser MySQL Database
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
That was very long and very wide so I didn't read all of it. But you seem to be under the impression that a Date has a time zone. It doesn't. Your comments suggest you are displaying a Date in some way and expecting that display to use some time zone other than your local time zone. It won't.

If you have a string which represents a timestamp in one time zone, and you want to change that to a string which represents a timestamp in another time zone, here's what you have to do:

  • Create a SimpleDateFormat and apply the first time zone to it
  • Use that to parse the String to a Date object
  • Create another SimpleDateFormat and apply the second time zone to it
  • Use that to format the Date object to a new String


  • Basically that's it. You don't need anything near as complicated as what you had there. In particular I don't think that Calendar objects are going to help.
     
    John Foley
    Greenhorn
    Posts: 7
    • Mark post as helpful
    • send pies
      Number of slices to send:
      Optional 'thank-you' note:
    • Quote
    • Report post to moderator
    Thanks for the reply Paul, I'll shorten everything down to where the issue is. Unfortunately, I have to use the Calendar object because that's what is being given to me.

    I need to get the time from the calendar and that will give me the Date Object.

    I then use SimpleDateFormat on the new date object to get me the time as "HHmm". I create a String buffer to concatenate the date I'm given (String) along with the time(hours and minutes) I just pulled out (via SimpleDateFormat) to parse a new date object.

    the string buffer will have this value: "2010-03-05T0901".

    I will then use another SimpleDateFormat object setup as "yyyy-MM-dd'T'HHmm" to parse the StringBuffer I just created above into a new date object.

    Now in debug mode I can see the StringBuffer is set to 2010-03-05T0901, however, after I parse that into another date object, Debug is showing the time for that object as 11:01, which doesn't look right. I'm not sure where the extra 2 hours are coming from. I would think that the time in the date object would stay at 0901. Am I misunderstanding something?

    Thanks,

     
    John Foley
    Greenhorn
    Posts: 7
    • Mark post as helpful
    • send pies
      Number of slices to send:
      Optional 'thank-you' note:
    • Quote
    • Report post to moderator
    So I guess the short question is, when I use SimpleDateFormat(yyyy-MM-dd'T'HHmm) to parse "2010-03-05T0901" the date I get back is "Fri Mar 05 11:01:00 CST 2010" and not "Fri Mar 05 09:01:00 CST 2010"?

     
    No prison can hold Chairface Chippendale. And on a totally different topic ... my stuff:
    a bit of art, as a gift, the permaculture playing cards
    https://gardener-gift.com
    reply
      Bookmark Topic Watch Topic
    • New Topic