Convert string to appropriate date with timezone java

后端 未结 2 1000
忘了有多久
忘了有多久 2021-01-12 12:54

I am Having Date with it\'s timezone, I want to convert it to another Timezone, E.g. I have Date \'3/15/2013 3:01:53 PM\' which is in TimeZone \'GMT-06:00\'. I want to conve

2条回答
  •  野趣味
    野趣味 (楼主)
    2021-01-12 13:21

    You need TWO format objects, one for parsing and another one for printing because you use two different timezones, see here:

    // h instead of H  because of AM/PM-format
    DateFormat parseFormat = new SimpleDateFormat("M/dd/yyyy hh:mm:ss aaa XXX"); 
    Date dt = null;
    try {
      dt = parseFormat.parse("3/15/2013 3:01:53 PM -06:00");
    }catch (ParseException e) {
      e.printStackTrace();
    } 
    
    DateFormat printFormat = new SimpleDateFormat("M/dd/yyyy hh:mm:ss aaa XXX"); 
    printFormat.setTimeZone(TimeZone.getTimeZone("GMT-05")); 
    String newDateString = printFormat.format(dt);
    System.out.println(newDateString);
    

    Output: 3/15/2013 04:01:53 PM -05:00

    If you want HH:mm:ss (24-hour-format) then you just replace

    hh:mm:ss aaa 
    

    by

    HH:mm:ss
    

    in printFormat-pattern.


    Comment on other aspects of question:

    A java.util.Date has no internal timezone and always refers to UTC by spec. You cannot change it inside this object. A timezone conversion is possible for the formatted string, however as demonstrated in my code example (you wanted to convert to zone GMT-05).

    The question then switches to the new requirement to print the Date-object in ISO-format using UTC timezone (symbol Z). This can be done in formatting by replacing the pattern with "yyyy-MM-dd'T'HH:mm:ssXXX" and explicitly setting the timezone of printFormat to GMT+00. You should clarify what you really want as formatted output.

    About java.util.GregorianCalendar: Setting the timezone here is changing the calendar-object in a programmatical way, so it affects method calls like calendar.get(Calendar.HOUR_OF_DAY). This has nothing to do with formatting however!

提交回复
热议问题