Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Datum von YYDDDSSSSS in DDMMYYYYhhmmss wandeln

Frage Microsoft Microsoft Office

Mitglied: Birdy2404

Birdy2404 (Level 1) - Jetzt verbinden

28.09.2012, aktualisiert 13:38 Uhr, 2869 Aufrufe, 9 Kommentare

Hallo zusammen,
habe eine Access-2007-Datenbank, in der ich das Fertigungsdatum nach Eingabe des aufgedruckten Fertigungsdatums wie oben genannt umwandeln möchte. D.h.
Eingabe der 10 Ziffern erfolgt im Feld [FD_Motor_org] im Format YYDDDsssss.
Im Feld [FD] soll es nach Aktualisierung dann als DD.MM.YYYY hh:mm:ss abgelegt werden, so dass es jeder lesen kann
Habe bereits eine Excel-Datei für Umrechnung, allerdings wird es dort als einzelne Felder ausgegeben.

Julianisches FD aufgelöstes Datum
Tag Zeit Datum Zeit (hh mm ss)
12242 18755 29.08.2012 5 12 35

Wobei
A3 ist die Eingabe der 5 Ziffern für den Tag (YYDDD)
B3 ist dei EIngabe der 5 Ziffern für die Zeit in Sekunden (sssss)
C3=DATUM((WENN((0+LINKS(A3;2))<50;2000;1900)+LINKS(A3;2));1;RECHTS(A3;3))
D3=ABRUNDEN(UMWANDELN(B3;"sec";"hr");0)
E3=ABRUNDEN(UMWANDELN(B3-60*60*D3;"sec";"mn");0)
F3=B3-60*60*D3-60*E3

Habe mittlerweile 2 Tage dafür verwendet mich durchzugoogeln und finde keinen Hinweis der mir Verständlich genug ist.
Wäre super wenn mir jemand von Euch helfen könnte.
Merci und Gruß
Andreas

Edit:
Aktuelle Darstellung in Access
316ce56f89f33e321c1b149f7a84ced9 - Klicke auf das Bild, um es zu vergrößern
Bild der Excel-Berechnung
8a8f207e32a1e5a1e530743e03695672 - Klicke auf das Bild, um es zu vergrößern
Mitglied: thaenhusen
28.09.2012 um 13:21 Uhr
Moin.

Du kannst den String in VBA zerlegen und dann mittels Dateadd und Modulo Operationen das Datum zusammensetzen.

Das kannst Du direkt im Acces vornehmen ohne irgend welche Rundungen etc.

HTH
MK
Bitte warten ..
Mitglied: MrNetman
28.09.2012, aktualisiert um 13:42 Uhr
HI Andreas,

Ein Datum im Format YYDDD?
Excel schreibt da als Ausgabe 12Samstag oder wie?
Oder sind es die Tage ab 1. Januar, die gemeint sind?
Und die Sekunden ab 0 Uhr?
Bei den Tagen musst du aufs Schlatjahr achten.
Aber bei einem festen Zahlenformat kannst natürlich mit LINKS und RECHTS arbeiten.
Willst du eine Excel-kompatible Ausgabe oder eine lesbare Darstellung erreichen?

Ausgang -> Ziel
1202407210 -> 24.01.2012 02:00:10
Jahr 12
Tage 024
Sekunden 07210
G3=D3&":"&E3&":"&F3 bringt dir die Uhrzeitanzeige im gewohnten Format
der Rest passt ja schon.
Die Funktion TEXT hilft noch weiter bei der Formatierung.

Gruß
Netman
Bitte warten ..
Mitglied: Birdy2404
28.09.2012 um 13:42 Uhr
Hi Netman,
die Umrechnung über Excel ist nur das Beispiel wo ich herkomme und dient dem veranschaulichen.
Die Umsetzung soll in Access über VBA ohne Excel erfolgen. Siehe Bilder von oben.
Gruß Andreas
Bitte warten ..
Mitglied: thaenhusen
28.09.2012, aktualisiert um 14:21 Uhr
Moin.

Hier etwas Code, der Dir weiterhelfen könnte... (Me.YYDDDSSSSS ist Dein Feld)
Du musst Dich noch um Ausnahmen kümmern!

01.
    Dim YY As Integer 
02.
    Dim DDD As Integer 
03.
    Dim SSSSS As Integer 
04.
    Dim jahr As Integer 
05.
    Dim stunden As Integer 
06.
    Dim minuten As Integer 
07.
    Dim sekunden As Integer 
08.
     
09.
    YY = CInt(Mid(Me.YYDDDSSSSS, 1, 2)) 
10.
    DDD = CInt(Mid(Me.YYDDDSSSSS, 3, 3)) 
11.
    SSSSS = CInt(Mid(Me.YYDDDSSSSS, 6, 5)) 
12.
     
13.
    If YY < 50 Then 
14.
        jahr = 2000 + YY 
15.
    Else 
16.
        jahr = 1900 + YY 
17.
    End If 
18.
 
19.
    sekunden = SSSSS Mod 60 
20.
    minuten = ((SSSSS - sekunden) / 60) Mod 60 
21.
    stunden = ((SSSSS - sekunden) / 60) \ 60 
22.
     
23.
    MsgBox DateAdd("y", DDD, "01.01." & jahr) & " " & stunden & " " & minuten & " " & sekunden
Bitte warten ..
Mitglied: Birdy2404
28.09.2012 um 15:22 Uhr
wunderbar, dankeschön, habe den Code etwas geändert, da er in einen Overflow für SSSSS lief und habe es als Long definiert.
Und im Datum lag er um einen Tag falsch, also habe ich einen Tag abgezogen.
So, nun möchte ich das Ergebnis nicht anzeigen lassen, sondern in das Feld [FD] übertragen. Hatte es bereits mit der letzten Zeile versucht, allerdings bekomme ich einen Laufzeitfehler und die Meldung, dass der Wert für dieses Feld nicht gültig ist

01.
    Dim YY As Integer 
02.
    Dim DDD As Integer 
03.
    Dim SSSSS As Long 
04.
    Dim jahr As Integer 
05.
    Dim stunden As Integer 
06.
    Dim minuten As Integer 
07.
    Dim sekunden As Integer 
08.
     
09.
    YY = CInt(Mid(Me.FD_Motor_org, 1, 2)) 
10.
    DDD = CInt(Mid(Me.FD_Motor_org, 3, 3)) - 1 
11.
    SSSSS = CLng(Mid(Me.FD_Motor_org, 6, 5)) 
12.
     
13.
    If YY < 50 Then 
14.
        jahr = 2000 + YY 
15.
    Else 
16.
        jahr = 1900 + YY 
17.
    End If 
18.
 
19.
    sekunden = SSSSS Mod 60 
20.
    minuten = ((SSSSS - sekunden) / 60) Mod 60 
21.
    stunden = ((SSSSS - sekunden) / 60) \ 60 
22.
     
23.
    MsgBox DateAdd("y", DDD, "01.01." & jahr) & " " & stunden & " " & minuten & " " & sekunden 
24.
    Me.FD = DateAdd("y", DDD, "01.01." & jahr) & " " & stunden & " " & minuten & " " & sekunden
Bitte warten ..
Mitglied: thaenhusen
28.09.2012, aktualisiert um 16:12 Uhr
Moin.

Du musst den String noch "kompatibel" machen...

01.
Me.FD = DateAdd("y", DDD, "01.01." & jahr) & " " & Format(stunden, "00") & ":" & Format(minuten, "00") & ":" & Format(sekunden, "00")
HTH
MK
Bitte warten ..
Mitglied: Birdy2404
28.09.2012 um 16:50 Uhr
Hat wunderbar funktioniert, vielen herzlichen Dank für die Unterstützung
Bitte warten ..
Mitglied: Biber
30.09.2012, aktualisiert um 23:06 Uhr
Moin andreas-san,

willkommen im Forum.

Da du ja den Beitrag noch nicht auf "Gelöst" gesetzt hast, erlaube mir bitte eine Nachfrage,

Du schriebst:
Eingabe der 10 Ziffern erfolgt im Feld [FD_Motor_org] im Format YYDDDsssss.
Im Feld [FD] soll es nach Aktualisierung dann als DD.MM.YYYY hh:mm:ss abgelegt werden, so dass es jeder lesen kann

Da entgleisten mir etwas die Gesichtszüge... weil: zwei Felder mit identischen Informationen (nur unterschiedlich formatiert) in demselben Datensatz...
--> ist nicht gut. Die ersten drei Coddsbrocken , die bei jedem Datenbanker automatisch hochpoppen sind: "Redundanz", "nicht widerspruchsfreie Daten", "Äh bäh"

Um dieses (ja ohnehin errechnete, also aus anderen Infos abgeleitete) hybsch formatierte Feld anzuzeigen, brauchst du es doch nicht abzuspeichern. Ist doch nur eine andere Darstellung des "FD_Motor_org"-Feldes.

Was spricht denn dagegen, es direkt mit dem SELECT-Statement zu erzeugen?
Alles für ein Timestamp-Format der Form "TT.MM.JJJJ hh:mm:ss" hast du doch.

Und mit den ACCESS-SQL-Funktionen DateSerial() und Format() ist es doch kein Hexenwerk.
Dann kannst du die 20 VBA-Zeilen auch einsparen und hast vor allem die Datums/Zeit-Information in EINEM Feld und nicht in zweien.

Grüße
Biber
Bitte warten ..
Mitglied: Birdy2404
30.09.2012 um 21:25 Uhr
Servus Biber,
hast recht, das hört sich geschickter an.
Die teilweise redundanden Daten verwende ich weil ich dadurch bei einem Excel-Export leichter die Auswertungen fahren kann.
Manchmal werden in dem ursprünglichen Feld noch weitere Informationen wie z.B. die Fertigungslinie und der Prüfstand eingetragen, deshalb ist dann später einfacher bei Problemen eine Rückverfolgung zu machen.
Merci und Gruß
Andreas
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Windows 10
gelöst Windows 10 - Datum und Zeitfehler bei Update (3)

Frage von swisstom zum Thema Windows 10 ...

Windows Userverwaltung
gelöst Datum einer Gruppenmitgliedschaft (1)

Frage von slansky zum Thema Windows Userverwaltung ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
RODC über VPN - Verbindung weg (10)

Frage von stefan2k1 zum Thema Windows Server ...