views:

869

answers:

4

I'm trying to change default firstDayOfWeek for java.util.Calendar from SUNDAY to MONDAY. Is it possible to achieve this through JVM configuration instead of adding this piece of code?

cal.setFirstDayOfWeek(Calendar.MONDAY);
A: 

Have you tried to invoke the JVM with a different locale? But you should be careful with side effects...

ricafeal
+1  A: 

According to the API:

Calendar defines a locale-specific seven day week using two parameters: the first day of the week and the minimal days in first week (from 1 to 7). These numbers are taken from the locale resource data when a Calendar is constructed. They may also be specified explicitly through the methods for setting their values.

So if you ensure that your locale is appropriately configured, this will be implicitly set. Personally, I would prefer explicitly setting this...

See #64038 for ways to set a locale from the command line.

toolkit
+6  A: 

The first day of the week is derived from the current locale. If you don't set the locale of the calendar (Calendar.getInstance(Locale), or new GregorianCalendar(Locale)), it will use the system's default. The system's default can be overridden by a JVM parameter:

public static void main(String[] args) {
    Calendar c = new GregorianCalendar();
    System.out.println(Locale.getDefault() + ": " + c.getFirstDayOfWeek());
}

This should show a different output with different JVM parameters for language/country:

  • -Duser.language=en -Duser.country=US -> en_US: 1 (Sunday)
  • -Duser.language=en -Duser.country=GB -> en_GB: 2 (Monday)

Don't forget that this could change other behavio(u)r too.

Kariem
A: 

Consider using jodatime

Pat