问题
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?
回答1:
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.
来源:https://stackoverflow.com/questions/11610802/timezone-and-messageformat-with-date-parameters