Search code examples
javatimeformatlocaltime

Java, How to change GMT time to local time?


Server sends me time like this:

2012-06-08 17:00:00 +0100

I need to change it like HH:MM based on local time. For example this time is what time at Japan, India, US and etc.

How can I do this? Thanks


Solution

  • Option 1: using java.util.Date/Calendar:

    First you need to parse the value to a Date, then reformat it in the format and time zone you're interested in:

    SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z",
                                                        Locale.US);
    Date date = inputFormat.parse(inputText);
    
    // Potentially use the default locale. This will use the local time zone already.
    SimpleDateFormat outputFormat = new SimpleDateFormat("HH:mm", Locale.US);
    String outputText = outputFormat.format(date);
    

    Option 2: using Joda Time

    Joda Time is a much better date/time library for Java.

    DateTimeFormatter inputFormatter = DateTimeFormat
        .forPattern("yyyy-MM-dd HH:mm:ss Z")
        .withLocale(Locale.US);
    
    DateTime parsed = inputFormatter.parseDateTime(inputText);
    
    DateTimeFormatter outputFormatter = DateTimeFormat
        .forPattern("HH:mm")
        .withLocale(Locale.US)
        .withZone(DateTimeZone.getDefault());
    
    String outputText = outputFormatter.print(parsed);
    

    Note that you should only convert to/from string representations when you really need to. Otherwise, use the most appropriate type based on your usage - this is where Joda Time really shines.