SimpleDateformat and "Day of week in month" (F)

F - Day of week in month

E - Day name in week

try u - Day number of week (1 = Monday, ..., 7 = Sunday)

Note that 'u' is since Java 7, but if you need just day number of the week then use Calendar

    Calendar c = Calendar.getInstance();
   System.out.println(c.get(Calendar.DAY_OF_WEEK));

You can change first day of week by changing Locale or directly as

    c.setFirstDayOfWeek(Calendar.SUNDAY);

Today is the second Wednesday in the current month.


Indexes for the days of week start from 0, not 1.


The java.util.Calendar/.Date and related classes are a confusing mess as you have learned the hard way. Counting from zero for month numbers and day-of-week numbers is one of many poor design choices made in those old classes.

java.time

Those old classes have been supplanted in Java 8 and later by the java.time framework. The new classes are inspired by the highly successful Joda-Time framework, intended as its successor, similar in concept but re-architected. Defined by JSR 310. Extended by the ThreeTen-Extra project. See the Tutorial.

DayOfWeek

For day of week, use the well-named DayOfWeek enum.

If you want an integer for day-of-week compliant with ISO 8601 where Monday = 1 and Sunday = 7, you can extract that from an instance of DayOfWeek.

Conversion

If starting with a java.util.Calendar object, convert to java.time.

An Instant is a moment on the timeline in UTC.

Instant instant = myJavaUtilCalendarObject.toInstant();

Apply a time zone in order to get a date in order to get a day-of-week.

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
DayOfWeek dayOfWeek = zdt.getDayOfWeek();

Note that time zone in crucial in determining a date, and therefore a day-of-week. The date is not the same around the world simultaneously. A new day dawns earlier in Paris than in Montréal, for example.

Number Of Day-Of-Week

Now that we have java.time and this enum built into Java, I suggest you freely pass around those enum instances rather than a magic number.

But if you insist on an integer, ask the DayOfWeek.

int dayOfWeekNumber = dayOfWeek.getValue();

String Of Day-Of-Week

That enum generates a localized String for the name of the day-of-week.

String output = dayOfWeek.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH );  // Or Locale.ENGLISH.

Tags:

Java