2008-11-06 12 views
2

est-il un moyen facile de convertir une chaîne qui contient ceci:VB conversion date

Date: Wed, 5 Nov 2008 13:12:12 -0500 (EST) 

dans une chaîne qui contient ceci:

20081105_131212 

MISE À JOUR:
J'ai fini à l'aide date.tryparse qui est similaire à tryParseExact sauf que vous n'avez pas à spécifier la chaîne de format. J'ai dû éliminer le() et l'EST pour que cela fonctionne. La chaîne de date sera toujours EST car la chaîne de date provient d'un serveur Web.

Chaîne d'origine:

Date: Wed, 5 Nov 2008 13:12:12 -0500 (EST) 

En utilisant ce code:

buff1.Remove(0, 6).Replace("(", "").Replace(")", "").Replace("EST", "").Trim() 

Devient cette chaîne:

Wed, 5 Nov 2008 13:12:12 -0500 

Ensuite, je peux formater correctement pour générer la date de mon nom en utilisant ceci:

If Date.TryParse(buff1, dateValue) Then 
    MsgBox(Format(dateValue, "yyyyMMdd_HHmmss")) 
Else 
    MsgBox("nope") 
End If 
+0

Est-ce vb6, vba ou vb.net? –

+0

vb.net Visual Basic 2005 – SKapsal

+0

Si vous supposez que c'est toujours EST, vous pouvez aussi raccourcir le remplacer par ceci -> buff1.Remove (0, 6) .Replace ("(EST)", "" –

Répondre

6

Encore mieux que Date.Parse dans ce cas serait Date.TryParseExact(). Cela vous permettrait de dire au framework quel format vous attendez et retourner un booléen plutôt que de lancer une exception si l'analyse échoue.

Ensuite, utilisez .ToString("yyyyMMdd_HHmmss") pour obtenir le nouveau format de chaîne souhaité.

est ici la référence de chaîne de format, dans le cas où vous en avez besoin:
http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

Enfin, je remarque que vous ne tenez pas compte du fuseau horaire -500 offset. Êtes-vous sûr que toutes vos ficelles sont vraiment du même fuseau horaire?

0

Format(date, "yyyyMMdd_HHmmss")

Plus d'aide sur la fonction format.

+0

Ceux-ci devraient être des H majuscules. –

+0

En outre, cela fonctionnerait avec un objet date, mais la question concerne une chaîne spécifiquement formatée avec des informations supplémentaires à nettoyer. –

1

Si par VB vous dire VB.NET, vous pouvez utiliser Date.Parse suivie ToString() avec une chaîne de format:

Date.Parse(YourDateString).ToString("yyyyMMdd_HHmmss") 

Note: Retirez la première "Date:" avant analyser la chaîne.

0

Comme solution de @ splattne en VB.NET, mais avec le nettoyage et ...

Dim strDateVal As String = "Date: Wed, 5 Nov 2008 13:12:12 -0500 (EST)" 
strDateVal = strDateVal.Substring(strDateVal.IndexOf(", ") + 2, strDateVal.Length - strDateVal.IndexOf(", ") - 2) 
strDateVal = strDateVal.Substring(0, strDateVal.LastIndexOf(" ")).TrimEnd 
Dim DateVal As Date = Date.Parse(strDateVal) 
Dim NewStringVal As String = Format(DateVal, "yyyyMMdd_HHmmss") 

NOTE: Ce ne tient pas compte du fuseau horaire afin de correspondre à votre résultat escompté (par exemple les données de la question)

1

Pour une solution pure VB j'irais

Function ConvertDateString(ByVal Original As String) As String 
    Dim Elements As String() = Split(Original, " ") 
    Dim DateString As String = Elements(3) & " " & Elements(2) & " " & Elements(4) & " " & Elements(5) 
    Return Date.Parse(DateString).ToString("yyyyMMdd_HHmmsss") 
End Function 

Vous pouvez éliminer DateString en utilisant simplement la chaîne concaténée dans le Parase.Il tiendra sur une ligne si votre résolution est de 1024 par 768 ou plus.

0
Dim strDateVal As String = "Date: Wed, 5 Nov 2008 13:12:12 -0500 (EST)" 

strDateVal = strDateVal.Substring(strDateVal.IndexOf(", ") + 2, 
strDateVal.Length - strDateVal.IndexOf(", ") - 2) 

strDateVal = strDateVal.Substring(0, strDateVal.LastIndexOf(" ")).TrimEnd 

Dim DateVal As Date = Date.Parse(strDateVal) 
Dim NewStringVal As String = Format(DateVal, "ddMMyyyy_HHmmss")