C# - Formatação de data e hora para uma cultura específica
Neste artigo veremos como realizar a formatação de data e hora para uma cultura específica na linguagem C#. |
A
estrutura DateTime fornece métodos que permitem que seus aplicativos
executem operações sensíveis à cultura em um tipo DateTime.
Um aplicativo pode usar a classe DateTimeFormatInfo para formatar e
exibir um tipo DateTime com base na cultura.
Por exemplo, usando DateTimeFormatInfo.ShortDatePattern, a data de 1º de
fevereiro de 2001, pode ser formatada como 1/2/2001 para
inglês (Estados Unidos), "en-US", e 02/01/2001
para inglês (Reino Unido), "en-GB".
Um objeto DateTimeFormatInfo objeto pode ser criado para uma cultura
específica ou para a cultura invariável, mas não para uma cultura neutra. Uma
cultura neutra não fornece informações suficientes para exibir o formato de data
correta. Uma exceção é lançada se o aplicativo tenta criar um
DateTimeFormatInfo usando o objeto de uma cultura neutra.
Para especificar a cultura usamos a classe CultureInfo que fornece informações sobre uma cultura específica. As informações incluem os nomes da cultura, o sistema de escrita, o calendário usado, a ordem de classificação das cadeias de caracteres e a formatação de dados e números. A propriedade CultureInfo.CurrentCulture define o objeto CultureInfo que representa a cultura usada pela thread atual.
Vejamos como por essa teoria para funcionar na prática.
Recursos Usados
Criando o projeto Windows Forms
Abra o VS
2017 Community e crie um projeto do tipo Windows Forms App com o nome
CShp_Datas
1- Exibindo os nomes dos dias da semana em português :
Vamos exibir em um controle Combobox os dias da semana em português usando a cultura ('pt-BR'):
Código do evento Click do botão - Preencher dias da semana :
private void btnPreencherDiasSemana_Click(object sender, EventArgs e)
{
DateTime dia = DateTime.Now;
CultureInfo idioma = new CultureInfo("pt-BR");
for (int d = 1; d <= 7; d++)
{
dia = dia.AddDays(1);
cboDiasSemana.Items.Add(dia.ToString("D", idioma));
}
}
|
Você pode alterar o formato da exibição usando uma formatação diferente no ToString(). Veja abaixo as opções :
strDate = dt.ToString("MM/dd/yyyy"); // 07/21/2007
strDate = dt.ToString("dddd, dd MMMM yyyy"); //Saturday, 21 July 2007
strDate = dt.ToString("dddd, dd MMMM yyyy HH:mm"); // Saturday, 21 July 2007 14:58
strDate = dt.ToString("dddd, dd MMMM yyyy hh:mm tt"); // Saturday, 21 July 2007 03:00 PM
strDate = dt.ToString("dddd, dd MMMM yyyy H:mm"); // Saturday, 21 July 2007 5:01
strDate = dt.ToString("dddd, dd MMMM yyyy h:mm tt"); // Saturday, 21 July 2007 3:03 PM
strDate = dt.ToString("dddd, dd MMMM yyyy HH:mm:ss"); // Saturday, 21 July 2007 15:04:10
strDate = dt.ToString("MM/dd/yyyy HH:mm"); // 07/21/2007 15:05
strDate = dt.ToString("MM/dd/yyyy hh:mm tt"); // 07/21/2007 03:06 PM
strDate = dt.ToString("MM/dd/yyyy H:mm"); // 07/21/2007 15:07
strDate = dt.ToString("MM/dd/yyyy h:mm tt"); // 07/21/2007 3:07 PM
strDate = dt.ToString("MM/dd/yyyy HH:mm:ss"); // 07/21/2007 15:09:29
strDate = dt.ToString("MMMM dd"); // July 21
strDate = dt.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK"); // 2007-07-21T15:11:19.1250000+05:30
strDate = dt.ToString("ddd, dd MMM yyyy HH':'mm':'ss 'GMT'"); // Sat, 21 Jul 2007 15:12:16 GMT
strDate = dt.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss"); // 2007-07-21T15:12:57
strDate = dt.ToString("HH:mm"); // 15:14
strDate = dt.ToString("hh:mm tt"); // 03:14 PM
strDate = dt.ToString("H:mm"); // 5:15
strDate = dt.ToString("h:mm tt"); // 3:16 PM
strDate = dt.ToString("HH:mm:ss"); // 15:16:29
strDate = dt.ToString("yyyy'-'MM'-'dd HH':'mm':'ss'Z'"); // 2007-07-21 15:17:20Z
strDate = dt.ToString("dddd, dd MMMM yyyy HH:mm:ss"); // Saturday, 21 July 2007 15:17:58
strDate = dt.ToString("yyyy MMMM"); // 2007 July
|
2- Exibindo das formatadas com base na cultura :
Em um novo formulário inclua os seguintes controles:
Vejamos o código do formulário :
a-) Evento Load do formulário que carrega a combobox cboCultura com os nomes das culturas :
private void Form1_Load(object sender, EventArgs e)
{
// define as propriedades do ComboBox
cboCultura.DisplayMember = "DisplayName";
cboCultura.ValueMember = "LCID";
cboCultura.Sorted = true;
// cria um array lista para os locales
ArrayList _locales = new ArrayList();
// percorre as cultures
foreach (CultureInfo culture in CultureInfo.GetCultures(CultureTypes.AllCultures))
{
// adiciona o objeto cultureinfo no arraylist
_locales.Add(culture);
}
// vincula o arraylist com o combobox
cboCultura.DataSource = _locales;
}
|
b-) Evento DataChanged do controle MonthCalendar usado para obter e exibir a data selecionada no TextBox:
private void mcal1_DateChanged(object sender, DateRangeEventArgs e)
{
txtDataSelecionada.Text = mcal1.SelectionRange.Start.ToLongDateString();
}
|
c-) Na combobox cboFormato defina na propriedade Items os seguintes formatos:
d-)
No evento Click do botão de comando - Exibir Data Formatada para a Cultura
- inclua o código que vai aplicar a cultura e o formato e exibir a data
formatada :
private void btnExibirData_Click(object sender, EventArgs e)
{
CultureInfo idioma = new CultureInfo(cboCultura.Text);
string formato = cboFormato.Text;
txtDataFormatada.Text = mcal1.SelectionRange.Start.ToString(formato, idioma);
}
|
Executando o projeto e selecionando uma cultura e formato iremos obter:
Pegue o projeto completo aqui : CShp_datas1.zip
"(Disse Jesus) - Quem ama a sua vida
perdê-la-á, e quem neste mundo odeia a sua vida, guardá-la-á para a vida
eterna."
João 12:25
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Visual Basic 14 - Novidades da Nova Versão - III - Macoratti.net
Visual C# 6.0 - Novidades da nova versão ... - Macoratti.net
VB .NET - Datas, horas: conceitos e operações - Macoratti.net
C# - Consultando dados no SQL Server entre duas datas - Macoratti.net