TimeZone and MessageFormat with date parameters
Asked Answered
B

1

6

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?

Bawdry answered 23/7, 2012 at 10:32 Comment(0)
Z
5

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.

Zielsdorf answered 28/9, 2012 at 9:32 Comment(1)
Yeah, I thought that too. The only problem I see with it is that you need to be careful when dealing with multithreaded access -- better create a copy of entire MessageFormat if needed.Cathe

© 2022 - 2024 — McMap. All rights reserved.