???
Ich habe eine Tabelle mit folgendem Inhalt
"March 13, 2013 1:59:42 PM GMT+05:30"
Wie kann ich dieses Feld in ein Lesbares format zur Auswertung in Access einbinden, das ganze liegt als CVS Format vor.
Die Schwierigkeit ist, dass hier keine Möglichkeit besteht die Daten unter Access 2007 einzulesen als Datum.
Vielleicht kann mir jemand einen Tipp geben oder hat die Lösung !
DANKE im voraus.
Hallo,
z. B.:
Public Function fktConvertStringToDateTime(ByVal sDatum As String) As Date
Dim a() As String, i As Long, M As New Collection, strDate As String, datDate As Date, lngMin As Long, VZ As String
On Error GoTo fkt_Err
M.Add 1, "January" 'Monatsnamen an die vorkommenden anpassen
M.Add 2, "February"
M.Add 3, "March"
M.Add 4, "April"
M.Add 5, "May"
M.Add 6, "June"
M.Add 7, "July"
M.Add 8, "August"
M.Add 9, "September"
M.Add 10, "October"
M.Add 11, "November"
M.Add 12, "December"
a = Split(sDatum, " ")
a(1) = Left(a(1), 2)
VZ = Mid(a(5), 4, 1)
a(5) = Mid(a(5), 5)
strDate = a(1) & "." & M(a(0)) & "." & a(2) & " " & a(3)
datDate = CDate(strDate)
lngMin = Left(a(5), 2) * 60 + Right(a(5), 2)
If VZ = "-" Then lngMin = lngMin * -1
fktConvertStringToDateTime = DateAdd("n", lngMin, datDate)
Exit_Func:
Exit Function
fkt_Err:
MsgBox Err.Numer & ": " & Err.Description
Resume exit_Func
End Function
Vielen Dank für die schnelle antwort, aber wo soll denn das hinkopiert werden und
wie angewendet werden, die Iddee ist schon mal nicht schlecht. DANKE.
Opps, das ging in die Hose :-[
Feld2 Text1
February 21, 2013 6:15:20 PM GMT+05:30 21.02.2013 11:45:20
February 18, 2013 5:17:37 PM GMT+05:30 18.02.2013 10:47:37
February 18, 2013 5:01:20 PM GMT+05:30 18.02.2013 10:31:20
February 19, 2013 4:03:15 PM GMT+05:30 19.02.2013 09:33:15
March 1, 2013 12:28:25 PM GMT+05:30 ERROR
February 26, 2013 2:35:50 PM GMT+05:30 26.02.2013 08:05:50
February 4, 2013 9:35:26 PM GMT+05:30 ERROR
February 4, 2013 9:46:56 PM GMT+05:30 ERROR
February 4, 2013 9:49:58 PM GMT+05:30 ERROR
da die Zahl auch 1 Stelle haben kann funktioniert es doch nicht :-(
Feld2 Text1
February 21, 2013 6:15:20 PM GMT+05:30 21.02.2013 11:45:20
February 18, 2013 5:17:37 PM GMT+05:30 18.02.2013 10:47:37
February 18, 2013 5:01:20 PM GMT+05:30 18.02.2013 10:31:20
February 19, 2013 4:03:15 PM GMT+05:30 19.02.2013 09:33:15
March 1, 2013 12:28:25 PM GMT+05:30
February 26, 2013 2:35:50 PM GMT+05:30 26.02.2013 08:05:50
February 4, 2013 9:35:26 PM GMT+05:30
February 4, 2013 9:46:56 PM GMT+05:30
February 4, 2013 9:49:58 PM GMT+05:30
Hallo,
dann halt eine kleine Anpassung:
a = Split(sDatum, " ")
a(1) = Replace(a(1), ",", "")
VZ = Mid(a(5), 4, 1)
a(5) = Mid(a(5), 5)
oder auch
a(1) = Val(a(1))
Hallo
ich glaube die Funktion von Franz rechnet leider falsch. Zum einem wird AM/PM nicht berücktsichtigt, als auch die berechnung der UTC/GMT aus der Zeitzone ist falsch, denn aus + sollte - werden und umgekehrt.
Ich bin mir nicht sicher aber ich glaube es gibt einen VB(A)-Befehl zu Formatieren bei dem man die LCID angeben kann. Da diese mir nicht einfällt hier eine Alternative mittels API
Declare Function VarDateFromStr Lib "OLEAUT32.DLL" ( _
ByVal strIn As Long _
, ByVal lcid As Long _
, ByVal dwFlags As Long _
, ByRef pdateOut As Double _
) As Long
Function DateTimeFromString(ByVal s As String, Optional ByVal lcid As Long) As Date
Dim d As Double
Dim g As Date
Dim UTCOff As String
UTCOff = Mid$(s, InStr(s, " GMT"))
s = Replace(s, UTCOff, "")
Call VarDateFromStr(StrPtr(s), lcid, &H80000000, d)
g = Mid$(UTCOff, 6)
DateTimeFromString = d + (g * IIf(Mid$(UTCOff, 5, 1) = "-", 1, -1))
End Function
Auch diese gibt (wie von Franz auch ursprünglich gedacht) die reine UTC-Zeit zurück. Alternativ könntest du die vorgegebene Locale Zeitangabe beibehalten und in einer weiteren Spalte die Ursprungszeitzone (GMT+05:30) erfassen
PS:
Der Aufruf in diesem Fall ist, da der Ausgangsstring ein Amerikanisches Datumsformat beinhaltet:
DateTimeFromString("February 21, 2013 6:15:20 PM GMT+05:30", 1033)
wobei hier 1033 die Länder & Sprache- Einstellung für die USA ist.
Hallo,
in der Tat, das AM/PM hab ich vergessen... :o
und GMT+xxx kann man ja einfach korrigieren..
.Public Function fktConvertStringToDateTime(ByVal sDatum As String) As Date
Dim a() As String, i As Long, M As New Collection, strDate As String, datDate As Date, lngMin As Long, VZ As String
On Error GoTo fkt_Err
M.Add 1, "January" 'Monatsnamen an die vorkommenden anpassen
M.Add 2, "February"
M.Add 3, "March"
M.Add 4, "April"
M.Add 5, "May"
M.Add 6, "June"
M.Add 7, "July"
M.Add 8, "August"
M.Add 9, "September"
M.Add 10, "October"
M.Add 11, "November"
M.Add 12, "December"
a = Split(sDatum, " ")
a(1) = Val(a(1))
VZ = Mid(a(5), 4, 1)
a(5) = Mid(a(5), 5)
strDate = M(a(0)) & "/" & a(1) & "/" & a(2) & " " & a(3) & " " & a(4)
datDate = CDate(strDate)
lngMin = Left(a(5), 2) * 60 + Right(a(5), 2)
If VZ = "+" Then lngMin = lngMin * -1
fktConvertStringToDateTime = DateAdd("n", lngMin, datDate)
exit_Func:
Exit Function
fkt_Err:
MsgBox Err.Numer & ": " & Err.Description
Resume exit_Func
End Function
Feld1 Text1
February 21, 2013 6:15:20 PM GMT+05:30 21. Feb. 13
December 1, 2013 6:15:20 PM GMT+05:30 12. Jan. 13
February 1, 2013 6:15:20 PM GMT+05:30 02. Jan. 13
March 21, 2013 6:15:20 PM GMT+05:30 21. Mrz. 13
klappt noch nicht ganz ?
Hi,
vielleicht hilft Dir:
strDate = Format(M(a(0)) & "/" & a(1) & "/" & a(2), "MM.DD.YYYY") & " " & a(3) & " " & a(4)
Harald
Im Direktbereich:
?CDate("Februar 21, 2013 6:15:20 PM")
21.02.2013 18:15:20
Bei den Ursprungsstrings muss man also nur die Monatsangabe übersetzen in die verwendete Sprache (February => Februar), wie das bereits gezeigt wurde, und der GMT-Teil ist abzuschneiden.
MfGA
ebs
Hallo,
oder strDate so berechnen:
strDate = a(1) & "." & M(a(0)) & "." & a(2) & " " & a(3) & " " & a(4)