Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TimeZone and MessageFormat with date parameters

MessageFormat class is cool because we can insert parameters and do the formatting directly with it. This permits me to be able to easily override a date format directly in a message bundle properties files.

For exemple:

MessageFormat.format("Test inserting a date param here: {0,date,dd/MM/yyyy HH'h'mm} -> OK cool", new Date() );

But what if i need to display the date in different timezones?

I know i can format all dates before injecting them in my bundle, but this is a pain to format every date displayed...


At work we are using

org.springframework.context.support.ReloadableResourceBundleMessageSource

I can probably try to override it and create my own MessageFormat that would consider using the good timezone. But it may not fit well for our architecture.

Do you see any other alternative?

like image 916
Sebastien Lorber Avatar asked Jul 23 '12 10:07

Sebastien Lorber


1 Answers

I was just looking at the same problem. This solution looks interesting: https://groups.google.com/d/msg/comp.lang.java.programmer/1AJIpwtn5HA/zd3Sw8IJrTQJ

public class Format {
  public static void main(String argv[]) {
    MessageFormat mf = new MessageFormat("The time is: {0, time, HH:mm}");


    TimeZone tz = TimeZone.getTimeZone("GMT");
    Object [] formats = mf.getFormats();
    for (int i = 0; i < formats.length; i++) {
        if (formats[i] instanceof SimpleDateFormat) {
            ((SimpleDateFormat)formats[i]).setTimeZone(tz);
        }
    }
    Date date = new Date();
    Object [] args = {date};
    System.out.println(mf.format(args));
  }
}

Idea is to go over parsed formats in MessageFormat, and set TimeZone to date formats.

like image 156
Peter Štibraný Avatar answered Sep 22 '22 15:09

Peter Štibraný