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).

Foi útil?

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")

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top