I'm guessing this: (from Oracle documentation)
The datetime format element
Dreturns the number of the day of the week (1-7). The day of the week that is numbered 1 is specified implicitly by the initialization parameter
select sysdate, to_char(sysdate,'D'), to_char(sysdate,'Day') from dual;
25-SEP-13 4 Wednesday
Which is (for me) correct. (Sunday == 1 )
What have we learned?
NLS_TERRITORY can be different depending on who/how/when the DB connection is made.
This is the same as NLS_DATE_FORMAT.
Never ever trust anything that depends on them unless the code explicitly sets the value.
This is why you ALWAYS provide the date format when converting from String to Date using the TO_CHAR();
I hadn't realised that the first day of the week depended on NLS_TERRITORY
I've taken your advice and used the NEXT_DAY function instead