Print last Sunday of each month in a given year
You do not need to put ;; everywhere. They're artifact of the interpreter.
print_date can be rewritten using printf:

let print_date = Printf.printf "%d/%d/%d"

It is better to store days in an array. List is not a good container for random access. Also, syntactically it would be easier to read: days.(2) is better than List.nth 2. Also, just FYI, you can have arrays in OCaml indexed from one, e.g., let days = Bigarray.(Array1.create int fortran_layout 12). Although, using them here would be overkill, I think.
You do not need parens here:

let last_sunday = last_day - (get_shift  y m last_day) in