Localização de descritores de formato de data
-
08-06-2019 - |
Pergunta
Qual é a melhor maneira de localizar um descritor de formato de data?
Como qualquer pessoa de uma cultura que não usa o formato mm/dd/aaaa sabe, é chato ter que inserir datas neste formato.A estrutura .NET fornece um suporte de localização muito bom, por isso é trivial analisar datas de acordo com a cultura do usuário, mas muitas vezes você também deseja exibir uma dica útil sobre o formato necessário (especialmente para distinguir entre yy e yyyy, que é intercambiável em maioria das culturas).
Qual é a melhor maneira de fazer isso de uma forma que faça sentido para a maioria dos usuários (por exemplo,dd/M/yyy é confuso devido à mudança de maiúsculas e minúsculas e à alternância entre uma e duas letras).
Solução 3
Aqui está meu método atual.Alguma sugestão?
Regex singleMToDoubleRegex = new Regex("(?<!m)m(?!m)");
Regex singleDToDoubleRegex = new Regex("(?<!d)d(?!d)");
CultureInfo currentCulture = CultureInfo.CurrentUICulture;
// If the culture is netural there is no date pattern to use, so use the default.
if (currentCulture.IsNeutralCulture)
{
currentCulture = CultureInfo.InvariantCulture;
}
// Massage the format into a more general user friendly form.
string shortDatePattern = CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern.ToLower();
shortDatePattern = singleMToDoubleRegex.Replace(shortDatePattern, "mm");
shortDatePattern = singleDToDoubleRegex.Replace(shortDatePattern, "dd");
Outras dicas
Basta usar ISO-8601.É um padrão internacional.
Date and time (current at page generation) expressed according to ISO 8601:
Date: 2014-07-05
Combined date and time in UTC: 2014-07-05T04:00:25+00:00
2014-07-05T04:00:25Z
Week: 2014-W27
Date with week number: 2014-W27-6
Ordinal date: 2014-186
Eu tenho que concordar com as datas 'erradas' do OP que realmente atrapalham minha educação em DD/MM/AAAA e acho as datas e horários ISO 8601 extremamente fáceis de trabalhar.Pela primeira vez o padrão acertou e engtech tem a resposta óbvia que não requer localização.
Eu iria relatar o formulário de entrada de aniversário no estouro de pilha como um bug por causa do quão incômodo ele é para a maioria do mundo.
O problema com os padrões internacionais é que praticamente ninguém os utiliza.Eu tento onde posso, mas sou forçado a usar dd/mm/yyyy em quase todos os lugares da vida real, o que significa que estou tão acostumado que é sempre um processo consciente usar o ISO-8601.Para a maioria das pessoas que nem sequer tentam usar a ISO-8601 é ainda pior.Se você puder internacionalizar onde puder, acho que é uma grande vantagem.
Que tal fornecer o formato (mm/dd/aaaa ou dd/mm/aaaa) seguido de uma impressão da data de hoje na cultura do usuário.MSDN tem um artigo sobre formatando um DateTime para a cultura da pessoa, usando o objeto CultureInfo que pode ser útil para fazer isso.Uma combinação do formato (com o qual a maioria das pessoas está familiarizada) combinada com a data atual representada nesse formato deve ser uma pista suficiente para a pessoa sobre como deve inserir a data.(Inclua também um controle de calendário para quem ainda não consegue descobrir).
Um formulário abreviado é conveniente e ajuda a evitar erros ortográficos.Localize conforme aplicável, mas certifique-se de exibir o formato esperado (não deixe o usuário cego).Forneça um controle seletor de data como um opcional auxiliar no preenchimento do campo.
Além disso, a análise instantânea e a exibição da data em formato longo também podem ajudar.
Melhor opção:Em vez disso, eu recomendaria usar um seletor de data padrão.
Alternativa:sempre que o conteúdo do controle de edição for alterado, analise-o e exiba (em um controle separado?) o formato longo da data (ou seja:entrada "03/04/09" exibição "Sua entrada:4 de março de 2009")