Учитывая ограниченное время и / или бюджет, я бы, вероятно, использовал SimpleDateFormat
для создания элементов, разделенных разделителями, а затем написал бы свою собственную функцию для преобразования этого в читаемый текст.
Итак, я бы сначала преобразовал в:
January|25|2001|6|00|PM
January|25|2000|7|05|PM
January|25|2011|7|52|PM
затем проанализируйте результат в произвольном формате (основываясь на том, как я хочу услышать озвученную дату / время), затем выполните преобразование текста в речь. Мне кажется, что число крайних случаев невелико.