Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: EDVHILFEHR am März 27, 2013, 09:23:46

Titel: Datum Konvertieren
Beitrag von: EDVHILFEHR am März 27, 2013, 09:23:46
 ???

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.
Titel: Re: Datum Konvertieren
Beitrag von: DF6GL am März 27, 2013, 11:28:11
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
Titel: Re: Datum Konvertieren
Beitrag von: EDVHILFEHR am März 27, 2013, 13:56:38
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.
Titel: Re: Datum Konvertieren
Beitrag von: DF6GL am März 27, 2013, 14:23:22
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 :-(
Titel: Re: Datum Konvertieren
Beitrag von: EDVHILFEHR am März 27, 2013, 15:47:20
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   
Titel: Re: Datum Konvertieren
Beitrag von: DF6GL am März 27, 2013, 16:23:25
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))
Titel: Re: Datum Konvertieren
Beitrag von: daolix am März 27, 2013, 21:04:05
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.




Titel: Re: Datum Konvertieren
Beitrag von: DF6GL am März 28, 2013, 09:33:45
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
Titel: Re: Datum Konvertieren
Beitrag von: EDVHILFEHR am März 29, 2013, 23:47:59
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 ?
Titel: Re: Datum Konvertieren
Beitrag von: bahasu am März 30, 2013, 08:00:32
Hi,

vielleicht hilft Dir:

strDate = Format(M(a(0)) & "/" & a(1) & "/" & a(2), "MM.DD.YYYY") & " " & a(3) & " " & a(4)

Harald
Titel: Re: Datum Konvertieren
Beitrag von: ebs17 am März 30, 2013, 10:34:54
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
Titel: Re: Datum Konvertieren
Beitrag von: DF6GL am März 30, 2013, 17:31:23
Hallo,




oder strDate so berechnen:



strDate = a(1) & "." & M(a(0)) & "." & a(2) & " " & a(3) & " " & a(4)