Если вы находитесь в Интернете, вы можете спросить у известного и надежного источника времени. Если человек, запускающий вашу программу, хочет помешать вашей программе делать это (например, если вы дали ему ограниченную по времени лицензию, и он не хочет платить за дополнительное время), он может подделать или заблокировать это соединение.
В одном проекте, над которым я работал, мы разместили в оборудовании безопасный, надежный источник времени, который нельзя было подделать. Он был разработан для шифрования и лицензирования и имел библиотеку Java для доступа к нему. Извините, я не могу вспомнить название устройства.
Так что ответ может быть да, а может быть, нет.
Я не совсем понимаю ваш вопрос, но могу ответить на ваш заголовок:
GregorianCalendar gc = new GregorianCalendar(System.getCurrentTimeMillis());
int year = gc.get(Calendar.YEAR);
Есть ли у вашей системы доступ в Интернет? Если это так, вы можете использовать синхронизацию со службами точного времени (например: http://tldp.org/HOWTO/TimePrecision-HOWTO/ntp.html ) и предоставить желаемое.
Методы уровня программирования разработаны для получения даты и времени из самой системы. Вы не можете изменить их, чтобы получить даты, кроме указанных в Системе.
Для вашего дополнительного требования, если вы действительно хотите его иметь, вам потребуется синхронизация между вашим клиентским компьютером и сервером.