According to IBM, @Year and other similar functions require a javascript date as the argument in xPages. The fact that it works in the web with notesdatetime.dateOnly is actually unexpected.
They didn't know of a way to get the year value from a NotesDateTime object in xPages, so gonna have to use a bit of a mixture I think