CONVERSÃO DATA NA LINGUA INGLESA
PessoALL,
Por favor, preciso de sugestões, opiniões, dicas, etc.
EXEMPLO -
Eu tenho esse texto:
[ô]OUTUBRO 23, 2015
Preciso converter para:
[ô]OCTOBER 23Th, 2015
Eu montei uma função estilo [Ô]pá-pum[Ô] na correria:
Caras, mas prá nóis ... ficou horrÃvel...
Por favor, alguém tem alguma ideia de como melhorar esta função decadente? A-Mun-Rá?
Vou recebe-la sempre assim:
Obrigado!
[][ô]s,
Tunusat.
Por favor, preciso de sugestões, opiniões, dicas, etc.
EXEMPLO -
Eu tenho esse texto:
[ô]OUTUBRO 23, 2015
Preciso converter para:
[ô]OCTOBER 23Th, 2015
Eu montei uma função estilo [Ô]pá-pum[Ô] na correria:
Public Function Fu_Retorna_Data_ingles(ByVal textoData As String) As String
Dim intPosicao As Integer
Dim textoDataNumero As String
Dim textoDataOrdinal As String
Dim textoDataIngles As String
textoData = UCase(textoData)
[ô]OUTUBRO 23, 2015
[ô]OCTOBER 23Th, 2015
Meses_Portugues = Array([Ô]JANEIRO[Ô], [Ô]FEVEREIRO[Ô], [Ô]MARÇO[Ô], [Ô]ABRIL[Ô], [Ô]MAIO[Ô], [Ô]JUNHO[Ô], [Ô]JULHO[Ô], [Ô]AGOSTO[Ô], [Ô]SETEMBRO[Ô], [Ô]OUTUBRO[Ô], [Ô]NOVEMBRO[Ô], [Ô]DEZEMBRO[Ô])
Meses_Ingles = Array([Ô]JANUARY[Ô], [Ô]FEBRUARY[Ô], [Ô]MARCH[Ô], [Ô]APRIL[Ô], [Ô]MAY[Ô], [Ô]JUNE[Ô], [Ô]JULY[Ô], [Ô]AUGUST[Ô], [Ô]SEPTEMBER[Ô], [Ô]OCTOBER[Ô], [Ô]NOVEMBER[Ô], [Ô]DECEMBER[Ô])
For i = 0 To 11
intPosicao = InStr(1, textoData, Meses_Portugues(i))
If intPosicao > 0 Then
textoDataIngles = Meses_Ingles(i)
Exit For
End If
Next
intPosicao = InStr(1, textoData, [Ô] [Ô]) + 1
textoDataNumero = Mid$(textoData, intPosicao, 2)
Select Case textoDataNumero
Case [Ô]01[Ô]:
[ô]1st - First
textoDataOrdinal = [Ô]St[Ô]
Case [Ô]02[Ô]:
[ô]2nd - Second
textoDataOrdinal = [Ô]Nd[Ô]
Case [Ô]03[Ô]:
[ô]3rd - Third
textoDataOrdinal = [Ô]Rd[Ô]
Case Else:
[ô]4th - Fourth...
textoDataOrdinal = [Ô]Th[Ô]
End Select
Fu_Retorna_Data_ingles = textoDataIngles & [Ô] [Ô] & textoDataNumero & textoDataOrdinal & [Ô], [Ô] & Right(textoData, 4)
End Function
Caras, mas prá nóis ... ficou horrÃvel...
Por favor, alguém tem alguma ideia de como melhorar esta função decadente? A-Mun-Rá?
Vou recebe-la sempre assim:
txtDataRecebimento.Text = Fu_Retorna_Data_ingles(Format$(CDate(strDataRecebimento), [Ô]mmmm dd, yyyy[Ô]))
Obrigado!
[][ô]s,
Tunusat.
Fiz esse pequeno exemplo.
Acho que ficou um pouco mais elegante, todavia, o parâmetro da função é do tipo Date.
Exemplo de uso:
Acho que ficou um pouco mais elegante, todavia, o parâmetro da função é do tipo Date.
Private Function RetornaDataIngles(data As Date) As String
Const formatoSaida As String = [Ô]{0} {1}{2}, {3}[Ô]
Dim mesesIngles() As String = {[Ô]JANUARY[Ô], [Ô]FEBRUARY[Ô], [Ô]MARCH[Ô], [Ô]APRIL[Ô], [Ô]MAY[Ô], [Ô]JUNE[Ô], [Ô]JULY[Ô], [Ô]AUGUST[Ô], [Ô]SEPTEMBER[Ô], [Ô]OCTOBER[Ô], [Ô]NOVEMBER[Ô], [Ô]DECEMBER[Ô]}
Dim mesIngles As String = mesesIngles(data.Month - 1)
Dim ordinal As String = RetornaOrdinal(data.Day)
Return String.Format(formatoSaida, mesIngles, data.Day, ordinal, data.Year)
End Function
Private Function RetornaOrdinal(dia As Byte) As String
Dim ordinal As String
If dia = 1 Then
ordinal = [Ô]St[Ô]
ElseIf dia = 2 Then
ordinal = [Ô]Nd[Ô]
ElseIf dia = 3 Then
ordinal = [Ô]Rd[Ô]
Else
ordinal = [Ô]Th[Ô]
End If
Return ordinal
End Function
Exemplo de uso:
Sub Main()
Dim data As Date = Today
Console.WriteLine(RetornaDataIngles(data))
Console.ReadKey()
End Sub
Porque essa mania de usar data em formato String? Data é um tipo de dados especÃfico e deve ser tratado como tal:
Se quiser os nomes dos meses em outras lÃnguas, basta mudar a cultura:
Consulte a documentação para mais informações.
Dim data1 As Date = DateTime.Now
Console.WriteLine([Ô]Hoje é [Ô] + data1.ToString([Ô]MMMM dd, yyyy[Ô]) + [Ô].[Ô])
Se quiser os nomes dos meses em outras lÃnguas, basta mudar a cultura:
Console.WriteLine(data1.ToString([Ô]d MMMM[Ô], _
CultureInfo.CreateSpecificCulture([Ô]en-US[Ô])))
Consulte a documentação para mais informações.
Citação:Porque essa mania de usar data em formato String? Data é um tipo de dados especÃfico e deve ser tratado como tal:
Dim data1 As Date = DateTime.Now
Console.WriteLine([Ô]Hoje é [Ô] + data1.ToString([Ô]MMMM dd, yyyy[Ô]) + [Ô].[Ô])
Se quiser os nomes dos meses em outras lÃnguas, basta mudar a cultura:
Console.WriteLine(data1.ToString([Ô]d MMMM[Ô], _
CultureInfo.CreateSpecificCulture([Ô]en-US[Ô])))
...é tão simples usar o CultureInfo.....
PessoALL,
Podia jurar que tinha escolhido certo: [Ô]VB / VBA[Ô] (VB6)
Bom ... melhorei um pouquinho:
[][ô]s,
Tunusat.
Podia jurar que tinha escolhido certo: [Ô]VB / VBA[Ô] (VB6)
Bom ... melhorei um pouquinho:
Public Function Fu_Retorna_Data_ingles(ByVal textoData As String) As String
Dim intMes As Integer
Dim intPosicao As Integer
Dim textoDataIngles As String
Dim textoDataNumero As String
Dim Meses_Ingles() As Variant
[ô]OUTUBRO 26, 2015
[ô]OCTOBER 26Th, 2015
Meses_Ingles = Array([Ô]JANUARY[Ô], [Ô]FEBRUARY[Ô], [Ô]MARCH[Ô], [Ô]APRIL[Ô], [Ô]MAY[Ô], [Ô]JUNE[Ô], [Ô]JULY[Ô], [Ô]AUGUST[Ô], [Ô]SEPTEMBER[Ô], [Ô]OCTOBER[Ô], [Ô]NOVEMBER[Ô], [Ô]DECEMBER[Ô])
intMes = Month(textoData)
textoDataIngles = Meses_Ingles(intMes - 1)
intPosicao = InStr(1, textoData, [Ô] [Ô]) + 1
textoDataNumero = Mid$(textoData, intPosicao, 2)
Select Case textoDataNumero
Case [Ô]01[Ô]:
[ô]1st - First
textoDataNumero = textoDataNumero & [Ô]St[Ô]
Case [Ô]02[Ô]:
[ô]2nd - Second
textoDataNumero = textoDataNumero & [Ô]Nd[Ô]
Case [Ô]03[Ô]:
[ô]3rd - Third
textoDataNumero = textoDataNumero & [Ô]Rd[Ô]
Case Else:
[ô]4th - Fourth...
textoDataNumero = textoDataNumero & [Ô]Th[Ô]
End Select
Fu_Retorna_Data_ingles = textoDataIngles & [Ô] [Ô] & textoDataNumero & [Ô], [Ô] & Right(textoData, 4)
End Function
[][ô]s,
Tunusat.
Tópico encerrado , respostas não são mais permitidas