Ok, vou tentar explicar melhor.
Meu sistema usa i18n e além disso tb funciona com 3 diferentes BDs: MySQL, Oracle e SQLServer (este estamos terminando de implementar).
Então eu tenho uma tabela com os tags de i18n. Entre tantos tags, tenho esses:
mascaraDataMysql - %d/%m/%Y
mascaraDataOracle - dd/mm/yyyy
mascaraDataSqlserver - 103
mascaraDataSimplesMysql - %d/%m/%y
mascaraDataSimplesOracle - dd/mm/yy
mascaraDataSimplesSqlserver - <<esse eu não sei>>
mascaraDiaMesMysql - %d/%m
mascaraDiaMesOracle - dd/mm
mascaraDiaMesSqlserver - <<esse eu não sei>>
Em meu sistema tenho uma interface, e através dela é instanciada a classe correspondente as instruções SQL de acordo com o BD que o usuário tiver configurado que deseja usar.
Vou usar como ex. um SQL simplificado de um relatório simples que tenho aqui.
No MySQL tenho ele assim:
sql = "select c.codigo, c.descricao, "+
" DATE_FORMAT(m.data,'" + meuResourceBundle.getString("mascaraDataMysql") + "') as data, "+
" m.loja, m.caixa, m.hora, IFNULL(m.valortot,0) as valor, "+
" m.cmc7 as obs "+
" from movcaixa m "+
"left join contas c on c.codigo = m.tipopgto "+
" where m.data >= '2007/01/01' "+
" and m.data <= '2007/12/31' "+
" and m.loja = 1 "+
" and m.cancelado <> 'S' "+
" and m.status = '60' "+
"order by 1,m.data,6";
No Oracle é assim:
sql = "select c.codigo, c.descricao, "+
" TO_CHAR(m.data,'" + meuResourceBundle.getString("mascaraDataOracle") + "') as data, "+
" m.loja, m.caixa, m.hora, NVL(m.valortot,0) as valor, "+
" m.cmc7 as obs "+
" from movcaixa m "+
"left join contas c on c.codigo = m.tipopgto "+
" where m.data >= TO_DATE('2007/01/01','yyyy/mm/dd') "+
" and m.data <= TO_DATE('2007/12/31','yyyy/mm/dd') "+
" and m.loja = 1 "+
" and m.cancelado <> 'S' "+
" and m.status = '60' "+
"order by 1,m.data,6";
No SqlServer é assim:
sql = "select c.codigo, c.descricao, "+
" CONVERT(varchar, m.data, " + meuResourceBundle.getString("mascaraDataSqlserver") + ") as data, "+
" m.loja, m.caixa, m.hora, ISNULL(m.valortot,0) as valor, "+
" m.cmc7 as obs "+
" from movcaixa m "+
"left join contas c on c.codigo = m.tipopgto "+
" where m.data >= '2007/01/01' "+
" and m.data <= '2007/09/30' "+
" and m.loja = 1 "+
" and m.cancelado <> 'S' "+
" and m.status = '60' "+
"order by 1,m.data,6";
Entendeu agora pq eu preciso entender se existe alguma forma de montar as máscaras de data como eu quiser?
No exemplo que eu dei, eu estou usando apenas a formatação dd/mm/yyyy, em outros SQLs uso dd/mm, ou mm/yyyy, dd/mm/yy, etc, etc… e claro, isso apenas falando do nosso padrão brasileiro. Quem configura aquelas tags de i18n são técnicos (não programadores, técnicos do suporte e instalação), a partir de regras que especificamos.
Ou seja, isso não é fixo dentro do sistema de forma que eu possa fazer um substring e montar o formato como eu quiser.
E contrário ao que vc disse, não posso fazer a formatação da data na apresentação dos dados como vc sugeriu, tenho outras coisas envolvidas que me impedem de fazer isso, as quais nem vou detalhar pra não me alongar muito no que não vai me ajudar.
Bom, agora acho que consegui me expressar melhor. 
Conto com a ajuda de vcs!