CONVERSÃO DATA NA LINGUA INGLESA

TUNUSAT 23/10/2015 17:04:11
#452973
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:

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.
DS2T 23/10/2015 17:39:59
#452975
Resposta escolhida
Fiz esse pequeno exemplo.
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
KERPLUNK 23/10/2015 19:06:55
#452979
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[Ô])))


Consulte a documentação para mais informações.
F001E 23/10/2015 23:42:57
#452997
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.....
TUNUSAT 26/10/2015 09:20:49
#453065
PessoALL,

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